|
|
@ -245,7 +245,7 @@ counter:std::rc::Rc<std::sync::Mutex<i32>>]`
|
|
|
|
|
|
|
|
|
|
|
|
你可能会好奇为什么不是所有的原始类型都是原子性的?为什么不是所有标准库中的类型都默认使用 `Arc<T>` 实现?原因在于线程安全带有性能惩罚,我们希望只在必要时才为此买单。如果只是在单线程中对值进行操作,原子性提供的保证并无必要,代码可以因此运行的更快。
|
|
|
|
你可能会好奇为什么不是所有的原始类型都是原子性的?为什么不是所有标准库中的类型都默认使用 `Arc<T>` 实现?原因在于线程安全带有性能惩罚,我们希望只在必要时才为此买单。如果只是在单线程中对值进行操作,原子性提供的保证并无必要,代码可以因此运行的更快。
|
|
|
|
|
|
|
|
|
|
|
|
回到之前的例子:`Arc<T>` 和 `Rc<T>` 有着相同的 API,所以修改程序修改 `use` 行和 `new` 调用。示例 16-15 中的代码最终可以编译和运行:
|
|
|
|
回到之前的例子:`Arc<T>` 和 `Rc<T>` 有着相同的 API,所以修改程序中的 `use` 行和 `new` 调用。示例 16-15 中的代码最终可以编译和运行:
|
|
|
|
|
|
|
|
|
|
|
|
<span class="filename">文件名: src/main.rs</span>
|
|
|
|
<span class="filename">文件名: src/main.rs</span>
|
|
|
|
|
|
|
|
|
|
|
|