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 完全相同。