From eb17e1673665c44a39f665ed5aada978d4788913 Mon Sep 17 00:00:00 2001 From: luoxiangyong <30311446+luoxiangyong@users.noreply.github.com> Date: Thu, 1 Mar 2018 08:51:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A416-03=EF=BC=88=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E9=97=B4=E5=85=B1=E4=BA=AB=20`Mutex`?= =?UTF-8?q?=EF=BC=89=E5=A4=84=E5=A4=9A=E4=BD=99=E7=9A=84=E6=96=87=E5=AD=97?= =?UTF-8?q?=E8=A1=A8=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ch16-03-shared-state.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ch16-03-shared-state.md b/src/ch16-03-shared-state.md index f83cdd4..b010ec6 100644 --- a/src/ch16-03-shared-state.md +++ b/src/ch16-03-shared-state.md @@ -61,7 +61,7 @@ fn main() { #### 在线程间共享 `Mutex` -现在让我们尝试使用 `Mutex` 在多个线程间共享值。我们将启动十个线程,并在各个线程中对同一个计数器值加一,这样计数器将从 0 变为 10。注意,接下来的几个例子会出现编译错误,而我们将通过这些错误来学习如何使用 `Mutex`,以及 Rust 又是如何帮助我们正确正确使用的。示例 16-13 是最开始的例子: +现在让我们尝试使用 `Mutex` 在多个线程间共享值。我们将启动十个线程,并在各个线程中对同一个计数器值加一,这样计数器将从 0 变为 10。注意,接下来的几个例子会出现编译错误,而我们将通过这些错误来学习如何使用 `Mutex`,以及 Rust 又是如何帮助我们正确使用的。示例 16-13 是最开始的例子: 文件名: src/main.rs @@ -291,4 +291,4 @@ Result: 10 另一个值得注意的细节是 Rust 不能避免使用 `Mutex` 的全部逻辑错误。回忆一下第十五章使用 `Rc` 就有造成引用循环的风险,这时两个 `Rc` 值相互引用,造成内存泄露。同理,`Mutex` 也有造成 **死锁**(*deadlock*) 的风险。这发生于当一个操作需要锁住两个资源而两个线程各持一个锁,这会造成它们永远相互等待。如果你对这个主题感兴趣,尝试编写一个带有死锁的 Rust 程序,接着研究任何其他语言中使用互斥器的死锁规避策略并尝试在 Rust 中实现他们。标准库中 `Mutex` 和 `MutexGuard` 的 API 文档会提供有用的信息。 -接下来,为了丰富本章的内容,让我们讨论一下 `Send`和 `Sync` trait 以及如何对自定义类型使用他们。 \ No newline at end of file +接下来,为了丰富本章的内容,让我们讨论一下 `Send`和 `Sync` trait 以及如何对自定义类型使用他们。