Rust并发
简介
线程
线程同步
互斥量
锁
原子量
Send和Sync
std::marker
中的 Sync
和 Send
Send
Send
允许在线程间转移所有权;Send
标记 trait 表明类型的所有权可以在线程间传递。几乎所有的 Rust 类型都是
Send
的, 裸指针除外;任何完全由
Send
的类型组成的类型也会自动被标记为Send
;Rc<T>
没有实现send
trait,无法用于线程共享,需用Arc<T>
;
Sync
Sync
允许在线程间共享所有权;实现了
Sync
的类型可以安全的在多个线程中拥有其值的引用;对于任意类型
T
,如果&T
(T
的引用)是Send
的话,T
就是Sync
的;基本类型是
Sync
的;完全由
Sync
的类型组成的类型也是Sync
的;实现
Send
的类型可以在线程间安全的传递其所有权;实现
Sync
的类型可以在线程间安全的共享(通过引用);若类型 T 的引用
&T
是Send
,则T
是Sync
;Send
: 将计算中的传递数据抽象到另一个并发计算 (我们称其为接收方),而对于发送方,将无法再次访问它;Sync
: 在程序的两个并发部分之间共享数据;
一个类型要在线程间安全的共享的前提是,指向它的引用必须能在线程间传递。因为如果引用都不能被传递,我们就无法在多个线程间使用引用去访问同一个数据了。