1个不稳定版本
0.1.0 | 2020年6月11日 |
---|
在Rust模式中排名第2251
16KB
212 行
tearor
tearor
提供了TearCell
,一种(几乎)线程安全的无锁cell类型,为任何是Pod
的类型提供撕裂访问。
撕裂访问指的是使用多个较小的、独立的读取或写入操作来完成更大的工作单元。例如,如果您通过执行4次写入(一次写入每个字节)或相反的方式写入到&mut u32。
TearCell使用同样的想法,但使用原子操作。如果您的T
太大而无法放入原子中,那么TearCell
将把它分成几个操作。
不言而喻,这意味着对TearCell::load
、TearCell::store
等的调用(等等)不是原子的(也不提供任何有关排序的保证),然而TearCell执行的每个单独的操作都是原子的(以我们能够获得的最低排序),这足以避免数据竞争。
它本质上是一个将数据竞争转化为数据损坏的工具。如果缺乏同步会导致数据竞争(例如,使用UnsafeCell),那么TearCell
很可能损坏您的数据。
然而,如果这对你来说无关紧要(原因多种多样:例如,您的同步是在外部执行的,您想执行乐观读取,所有线程都在写入相同的值,或者您怀念在C++中调试数据损坏问题的乐趣),那么TearCell
可能正是您想要的。
许可证
公有领域,如此处所述
依赖关系
~135KB