1 个不稳定版本
使用旧的 Rust 2015
0.1.2 | 2018年6月11日 |
---|---|
0.1.1 |
|
0.1.0 |
|
#13 在 #weak
110KB
1.5K SLoC
drc
Rust 库,引入了 Drc
智能指针及其对应的 Weak
类型。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
drc = "0.1"
然后将其添加到您的 crate 根目录
extern crate drc;
lib.rs
:
此小型库提供了 Drc
和 Weak
类型。'Drc' 代表 'Dynamically Reference Counted',是用于与存储在其中的数据交互的主要类型。它的行为与 Rc
相同,但可以转换为 Arc
,后者可以在线程间安全传递,然后再转换回 Drc
。这可以防止在单个线程上工作时执行不必要的原子操作,同时不会将数据限制在线程内。
技术细节
基本上,当 Arc
转换为 Drc
时,它实际上被保留在堆上位于数据结构中的内存中。这里还保留了一个“本地”的强引用计数和弱引用计数。如果本地强引用计数为零,则存储的 Arc
将被丢弃,但在任何其他正数值下,Arc
都将被保留。这意味着在一个线程中,Drc
可以无限克隆和传递而无需执行任何原子操作,直到最后一个 Drc
被丢弃。
Drc
的 Weak
函数功能类似,但比 Arc
的 Weak
或 Rc
的 Weak
稍微复杂。本质上,即使 Drc
的局部强引用计数达到零,尽管 Arc
将被丢弃,但如果存在另一个 Arc
或一组 Drc
,则可以通过升级一个 Weak
Drc
来创建一个新的 Drc
。
Drc::new
是一个方便的方法,用于创建 Arc
并将其放入其中。它的工作方式与使用 from
与 Arc
完全相同。