介绍

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