Rust并发控制之Channel

Rust官方sync包中提供了mpsc模式的 (多生产者,单消费者:multi-producer, single-consumer) channel,可以实现基于消息并发控制,而不是依赖控制内存共享(加锁)。这正是go语言作者 R. Pike 所推崇的方式:

Don’t communicate by sharing memory; share memory by communicating. (R. Pike)

今天就聊聊mpsc提供的sync_channelchannel

Read More

Rust并发控制之Semaphore-两线程交替打印

信号量(Semaphore)是一种对资源并发访问控制的方式。

区别于互斥锁(Mutex)是对共享资源的独占访问,Semaphore允许指定多个并发访问共享资源。

就是说Semaphore像一个持有令牌(permit/token)的桶,每一个并发访问需要持有(acquire)一个令牌来访问共享资源,

当没有令牌时,没法访问共享资源,直到有新的令牌加入(add)或者原来发出的令牌放回(release)桶中。

接下来,我们尝试用通过用它来实现两个线程交替打印1和2,来更直观了解如何使用semaphore

Read More

聊聊Rust的Cell和RefCell

内部可变性(interior mutability)是Rust用来表示在一个值的外部看起来是不可变的,但是在内部是可变的。这种模式通常用于在拥有不可变引用的同时修改目标数据。

CellRefCellRust提供的两种内部可变性的实现。Cell是用于Copy类型的,而RefCell是用于非Copy类型的。

不知道你有没有好奇过具体内部可变性应用在什么场景,为啥要分两种实现。

今天我们针对一些场景来聊聊这两个类型的应用。

Read More

掌握Rust:从零开始的所有权之旅

所有权是 Rust 很有意思的一个语言特性,但对于初学者却是一个比较有挑战的内容。

今天尝试用代码示例来聊聊 Rust 的所有权是什么,以及为什么要有所有权。希望能给初学的朋友一点帮助。

Tips:文中代码有相应注释,建议可以先不用纠结细节,关注整体。后边可以再挨个去研究具体代码细节

Read More