From c1bb02cdc919ebe62968a1caac1edfac40a43b19 Mon Sep 17 00:00:00 2001 From: shinolr Date: Sat, 4 Jun 2022 23:08:00 +0800 Subject: [PATCH] update ch16-03-shared-state.md --- src/ch16-03-shared-state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch16-03-shared-state.md b/src/ch16-03-shared-state.md index 28ace97..5ec439b 100644 --- a/src/ch16-03-shared-state.md +++ b/src/ch16-03-shared-state.md @@ -88,7 +88,7 @@ {{#include ../listings/ch16-fearless-concurrency/listing-16-14/output.txt}} ``` -哇哦,错误信息太长不看!这里是一些需要注意的重要部分:第一行错误表明 `` `std::rc::Rc>` cannot be sent between threads safely ``。编译器也告诉了我们原因 `` the trait bound `Send` is not satisfied ``。下一部分会讲到 `Send`:这是确保所使用的类型可以用于并发环境的 trait 之一。 +哇哦,错误信息太长不看!这里是一些需要注意的重要部分:第一行错误表明 `` `Rc>` cannot be sent between threads safely ``。编译器也告诉了我们原因 `` the trait `Send` is not implemented for `Rc>` ``。下一部分会讲到 `Send`:这是确保所使用的类型可以用于并发环境的 trait 之一。 不幸的是,`Rc` 并不能安全的在线程间共享。当 `Rc` 管理引用计数时,它必须在每一个 `clone` 调用时增加计数,并在每一个克隆被丢弃时减少计数。`Rc` 并没有使用任何并发原语,来确保改变计数的操作不会被其他线程打断。在计数出错时可能会导致诡异的 bug,比如可能会造成内存泄漏,或在使用结束之前就丢弃一个值。我们所需要的是一个完全类似 `Rc`,又以一种线程安全的方式改变引用计数的类型。