#cell #thread #mistakes #read-write #tearing #torn

no-std tearor

轻松将数据竞争转化为数据损坏!

1个不稳定版本

0.1.0 2020年6月11日

Rust模式中排名第2251

CC0许可

16KB
212

tearor

tearor提供了TearCell,一种(几乎)线程安全的无锁cell类型,为任何是Pod的类型提供撕裂访问。

撕裂访问指的是使用多个较小的、独立的读取或写入操作来完成更大的工作单元。例如,如果您通过执行4次写入(一次写入每个字节)或相反的方式写入到&mut u32。

TearCell使用同样的想法,但使用原子操作。如果您的T太大而无法放入原子中,那么TearCell将把它分成几个操作。

不言而喻,这意味着对TearCell::loadTearCell::store等的调用(等等)不是原子的(也不提供任何有关排序的保证),然而TearCell执行的每个单独的操作都是原子的(以我们能够获得的最低排序),这足以避免数据竞争。

它本质上是一个将数据竞争转化为数据损坏的工具。如果缺乏同步会导致数据竞争(例如,使用UnsafeCell),那么TearCell很可能损坏您的数据。

然而,如果这对你来说无关紧要(原因多种多样:例如,您的同步是在外部执行的,您想执行乐观读取,所有线程都在写入相同的值,或者您怀念在C++中调试数据损坏问题的乐趣),那么TearCell可能正是您想要的。

许可证

公有领域,如此处所述

依赖关系

~135KB