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 2023年6月12日

#237并发 中排名

每月 29 次下载

MIT 许可证

200KB
1.5K SLoC

Trc

MIT License Build status Docs status Tests status

Trc 是一个高效的堆分配智能指针,用于 Rust,它实现了线程引用计数。 Trc 代表:线程引用计数。 Trc 提供的数据共享所有权类似于 Arc<T>Rc<T>。它实现了线程引用计数,这是基于观察大多数对象只由一个线程使用。这意味着可以创建两个引用计数:一个用于线程本地使用,一个用于线程间共享的原子计数。线程引用计数将原子引用计数设置为使用数据的线程数。

Trc 指针之间的循环不能被分配,因为引用计数永远不会达到零。解决方案是 Weak<T>。一个 Weak<T> 是对 Trc<T> 持有的数据的非拥有引用。它们通过添加间接层来打破引用循环,并充当观察者。它们不能直接访问数据,必须转换为 TrcWeak 不会保持值的存在(可以被丢弃),只保持支持分配的存在。

为了安全地实现线程安全,Trc需要使用!Send!Sync。为了解决这个问题,Trc引入了一个SharedTrc<T>,它也是SendSyncSharedTrc是唯一一种在不需要Weak的情况下,安全地在线程间发送Trc的数据的方式。有关API信息,请参阅SharedTrc,其API与Weak类似。

由于Trc不是标准库的一部分,因此默认情况下无法实现CoerceUnsizedReceiver特质。然而,Trc提供了一个dyn_unstable特质,它可以为TrcSharedTrc启用上述特质,并且必须与夜间Rust(cargo +nightly ...)一起使用。

示例

请参阅此处的示例。

基准测试

点击此处查看更多基准测试。测试了多个不同的操作系统、CPU和架构。

Trc vs Arc performance

使用方法

要使用Trc,只需运行cargo add trc,或添加trc = "1.2.3"。可选地,您还可以通过添加trc = {git = "https://github.com/EricLBuehler/trc.git"}来使用最新版本。

依赖项