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"}来使用最新版本。