|
|
|
@ -6,7 +6,7 @@
|
|
|
|
|
|
|
|
|
|
Rust 的并发模型中一个有趣的方面是语言本身对并发知道的**很少**。我们讨论过的几乎所有内容都是标准库的一部分,而不是语言本身的内容。因为并不需要语言提供任何用于并发上下文中的内容,并发选择也不仅限于标准库或语言所提供的:我们可以编写自己的或使用别人编写的内容。
|
|
|
|
|
|
|
|
|
|
我们说了**几乎**所有内容都不在语言本身,那么位于语言本身的是什么呢?这是两个 trait,都位于`std::marker`:`Sync`和`Send`。
|
|
|
|
|
我们说了**几乎**所有内容都不在语言本身,那么位于语言本身的是什么呢?这是两个 trait,都位于`std::marker`:`Sync`和`Send`。
|
|
|
|
|
|
|
|
|
|
### `Send`用于表明所有权可能被传送给其他线程
|
|
|
|
|
|
|
|
|
@ -24,9 +24,9 @@ Rust 的并发模型中一个有趣的方面是语言本身对并发知道的**
|
|
|
|
|
|
|
|
|
|
### 手动实现`Send`和`Sync`是不安全的
|
|
|
|
|
|
|
|
|
|
通常并不需要实现`Send`和`Sync` trait,因为由是`Send`和`Sync`的类型组成的类型也自动就是`Send`和`Sync`的了。因为他们是标记 trait,甚至都不需要实现任何方法。他们只是用来加强并发相关的不可变行性的。
|
|
|
|
|
通常并不需要实现`Send`和`Sync` trait,因为由是`Send`和`Sync`的类型组成的类型也自动就是`Send`和`Sync`的了。因为他们是标记 trait,甚至都不需要实现任何方法。他们只是用来加强并发相关的不可变性的。
|
|
|
|
|
|
|
|
|
|
实现这些标记 trait 涉及到实现不安全的 Rust 代码。第十九章将会讲到如何使用不安全 Rust 代码;现在,重要的是在创建新的由不是`Send`和`Sync`的部分构成的并发类型时需要多加小心,以确保维持其安全保证。[The Nomicon] 中由更多关于这些保证和如何维持他们的信息。
|
|
|
|
|
实现这些标记 trait 涉及到实现不安全的 Rust 代码。第十九章将会讲到如何使用不安全 Rust 代码;现在,重要的是在创建新的由不是`Send`和`Sync`的部分构成的并发类型时需要多加小心,以确保维持其安全保证。[The Nomicon] 中有更多关于这些保证以及如何维持他们的信息。
|
|
|
|
|
|
|
|
|
|
[The Nomicon]: https://doc.rust-lang.org/stable/nomicon/vec.html
|
|
|
|
|
|
|
|
|
@ -36,6 +36,6 @@ Rust 的并发模型中一个有趣的方面是语言本身对并发知道的**
|
|
|
|
|
|
|
|
|
|
正如我们提到的,因为 Rust 本身很少有处理并发的部分内容,有很多的并发方案都由 crate 实现。他们比标准库要发展的更快;请在网上搜索当前最新的用于多线程场景的 crate。
|
|
|
|
|
|
|
|
|
|
Rust 提供了用于消息传递的通道,和像`Mutex<T>`和`Arc<T>`这样可以安全的用于并发上下文的智能指针。类型系统和借用检查器会确保这些场景中的代码不会出现数据竞争和无效的引用。一旦代码可以编译了,我们就可以坚信这些代码可以正确的运行于多线程环境,而不会出现其他语言中经常出现的那些难以追踪的 bug。并发编程不再是什么可怕的概念:无所畏惧的使你的程序使用并发吧!
|
|
|
|
|
Rust 提供了用于消息传递的通道,和像`Mutex<T>`和`Arc<T>`这样可以安全的用于并发上下文的智能指针。类型系统和借用检查器会确保这些场景中的代码不会出现数据竞争和无效的引用。一旦代码可以编译了,我们就可以坚信这些代码可以正确的运行于多线程环境,而不会出现其他语言中经常出现的那些难以追踪的 bug。并发编程不再是什么可怕的概念:无所畏惧地让你的程序使用并发吧!
|
|
|
|
|
|
|
|
|
|
接下来,让我们讨论一下当 Rust 程序变得更大时那些符合习惯的模拟问题和结构的解决方案,以及 Rust 风格如何与面向对象编程(Object Oriented Programming)中那些你所熟悉的概念相联系。
|
|
|
|
|
接下来,让我们讨论一下当 Rust 程序变得更大时有哪些符合语言习惯的问题建模和节构化解决方案的做法,以及 Rust 的风格是如何与面向对象编程(Object Oriented Programming)中那些你所熟悉的概念相联系的。
|