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