22 个稳定版本
1.2.4 | 2024年2月6日 |
---|---|
1.2.3 | 2023年9月9日 |
1.2.1 | 2023年7月12日 |
1.1.11 | 2023年6月16日 |
0.1.3 |
|
#237 在 并发 中排名
每月 29 次下载
200KB
1.5K SLoC
Trc
Trc
是一个高效的堆分配智能指针,用于 Rust,它实现了线程引用计数。 Trc
代表:线程引用计数。 Trc
提供的数据共享所有权类似于 Arc<T>
和 Rc<T>
。它实现了线程引用计数,这是基于观察大多数对象只由一个线程使用。这意味着可以创建两个引用计数:一个用于线程本地使用,一个用于线程间共享的原子计数。线程引用计数将原子引用计数设置为使用数据的线程数。
Trc
指针之间的循环不能被分配,因为引用计数永远不会达到零。解决方案是 Weak<T>
。一个 Weak<T>
是对 Trc<T>
持有的数据的非拥有引用。它们通过添加间接层来打破引用循环,并充当观察者。它们不能直接访问数据,必须转换为 Trc
。 Weak
不会保持值的存在(可以被丢弃),只保持支持分配的存在。
为了安全地实现线程安全,Trc
需要使用!Send
和!Sync
。为了解决这个问题,Trc
引入了一个SharedTrc<T>
,它也是Send
和Sync
。SharedTrc
是唯一一种在不需要Weak
的情况下,安全地在线程间发送Trc
的数据的方式。有关API信息,请参阅SharedTrc
,其API与Weak
类似。
由于Trc
不是标准库的一部分,因此默认情况下无法实现CoerceUnsized
和Receiver
特质。然而,Trc
提供了一个dyn_unstable
特质,它可以为Trc
和SharedTrc
启用上述特质,并且必须与夜间Rust(cargo +nightly ...
)一起使用。
示例
请参阅此处的示例。
基准测试
点击此处查看更多基准测试。测试了多个不同的操作系统、CPU和架构。
使用方法
要使用Trc
,只需运行cargo add trc
,或添加trc = "1.2.3"
。可选地,您还可以通过添加trc = {git = "https://github.com/EricLBuehler/trc.git"}
来使用最新版本。