Rust标准库中的原子引用计数(Arc)
https://doc.rust-lang.org/std/sync/struct.Arc.html
线程安全的引用计数指针。‘Arc’代表 “Atomically Reference Counted/原子引用计数”。
类型 Arc
Rust中的共享引用默认不允许改变,Arc也不例外:一般情况下,你无法获得Arc内部的东西的可变引用。如果你需要通过Arc进行改变,请使用Mutex、RwLock或Atomic类型。
线程安全
与 Rc
只要T实现了Send和Sync,ArcArc<RefCell<T>>
。RefCellArc<RefCell<T>
也会是Send。但这样一来,我们就有问题了。RefCell
最后,这意味着你可能需要将Arc
用 weak 打破循环
downgrade方法可以用来创建一个无主的Weak指针。Weak指针可以升级为Arc,但是如果存储在分配中的值已经被降级,则会返回None。换句话说,Weak指针不会使分配中的值保持活的,但是,它们会使分配(值的后备存储)保持活的。
Arc指针之间的循环永远不会被dealocated。基于这个原因,Weak被用来打破循环。例如,一棵树可以有从父节点到子节点的强Arc指针,而从子节点回到父节点的弱指针。