|
|
|
@ -9,7 +9,7 @@ Rust 所有权机制要求一个值只能有一个所有者,在大多数情况
|
|
|
|
|
|
|
|
|
|
这种实现机制就是 `Rc` 和 `Arc`,前者适用于单线程,后者适用于多线程。由于二者大部分情况下都相同,因此本章将以 `Rc` 作为讲解主体,对于 `Arc` 的不同之处,另外进行单独讲解。
|
|
|
|
|
|
|
|
|
|
## Rc<T>
|
|
|
|
|
## `Rc<T>`
|
|
|
|
|
|
|
|
|
|
引用计数(reference counting),顾名思义,通过记录一个数据被引用的次数来确定该数据是否正在被使用。当引用次数归零时,就代表该数据不再被使用,因此可以被清理释放。
|
|
|
|
|
|
|
|
|
@ -144,7 +144,7 @@ fn main() {
|
|
|
|
|
- `Rc` 只能用于同一线程内部,想要用于线程之间的对象共享,你需要使用 `Arc`
|
|
|
|
|
- `Rc<T>` 是一个智能指针,实现了 `Deref` 特征,因此你无需先解开 `Rc` 指针,再使用里面的 `T`,而是可以直接使用 `T`,例如上例中的 `gadget1.owner.name`
|
|
|
|
|
|
|
|
|
|
## 多线程无力的 Rc<T>
|
|
|
|
|
## 多线程无力的 `Rc<T>`
|
|
|
|
|
|
|
|
|
|
来看看在多线程场景使用 `Rc<T>` 会如何:
|
|
|
|
|
|
|
|
|
|