16 无畏并发
安全高效的处理并发编程是Rust的另一个主要的目标
内存安全和高效编程一直都是很多语言追求的目的,Rust采用所有权和类型系统来平衡处理这一点
本章我们将会了解
1.如何创建线程来同时运行多端代码
2.消息传递并发,其中channel 被用来在线程之间传递消息
3.共享状态并发,其中多个线程可以访问同一片数据
4.Sync和Send trait,将Rust的并发保证扩展到用户定义的以及标准库提供的类型中
16.4 使用Sync和Send trait的可扩展并发
Rust的并发模型中,语言本身对并发支持比较少,但是由于Rust语言本身的设计,反而在做并发编程的时候具有很高的效率
不过,很少不代表没有,两个内嵌于语言的并发概念是std::marker 中的 Sync 和 Send trait
通过 Send允许在线程之间转移所有权
Send标记 trait表明类型的所有权可以在线程间传递。几乎所有的Rust类型都是Send的,不过有一些类外,如R c.因为clone之后并尝试将所有权转移到另一个线程,这两个线程都可能同时更新引用计数。因此,R c被实现为用于单线程场景,这时不需要为拥有线程安全的引用计数而付出性能代价
因此,Rust类型系统和trait bound确保永远也不会意外的将不安全的Rc在线程间发送,强行编译会得到the trait Send
is not implemented for Rc<Mutex<i32>>
这样的错误,使用Arc就Ok
任何完全由send的类