rustp-34.send和sync的trait
介绍
- 内嵌于语言中的: std::market中的Sync,以及Send trait
- Send允许在线程之间转移所有权:
(1) Send标记trait表明类型的所有权可以在线程之间传递。几乎所有的Rust类型都是
Send的,但是如Rc是不能在线程之间Send
(2) 任何完全由Send类型组成的类型也会自动被标记为Send1
2
3
4
5
6//这个struct中的类型都是send
struct A {
a
b
c
} - Sync允许多线程访问
(1) Sync标记trait表明一个实现了Sync的类型可以安全在多个线程中拥有其值的引用
,也就是说对于任意类型T,如果&T是Send的化就是Sync的(引用是Send,则值是Sync的),也就是说这个引用可以安全
的发送到另外一个线程
(2) 智能指针Rc也不是Sync的,出于其不是Send相同的原因,RefCell 和Cell
系列类型不是Sync的。RefCell在运行时所进行的借用检查也不是线程安全的,Mutex
是Sync的 - 手动实现Send和Sync是不安全的
这两种trait通常并不需要手动实现,因为由Send和Sync的类型组成的类型,自动就是Send
和Sync的,因为他们是标记Trait,甚至都不需要实现任何方法,他们只是用来加强并发相关
的不可变性的。
Comment