主要观点:介绍了tearor::TearCell
类型,它是一个“线程安全”的单元格,将数据竞争降级为数据损坏,通过将内部UnsafeCell
中的数据解释为&[AtomicU8]
来实现线程安全,虽有风险但仍可在一定程度上忽略线程安全问题;给出了TearCell
的实现代码,包括读取load
和写入store
操作,都使用了Relaxed
顺序且基于bytemuck::Pod
;强调该代码虽有趣但可能并非对所有人有用且有一定风险,真实的 crate 更高效且稍少可疑。
关键信息:
TearCell
通过将数据视为&[AtomicU8]
实现线程安全,虽数据访问本质上是非原子的但使用Relaxed
顺序。- 实现中使用
bytemuck
库,Pod
类型有严格要求,如无填充字节、无未初始化字节等。 load
操作创建目标T
,获取其字节,通过atom_slice
获取源字节并逐个初始化。store
操作获取值的字节和atom_slice
,逐个将数据复制到原子中。
重要细节:
- 真实代码在处理较大结构时会使用更大的原子操作,目前
size_of
使用受限所以通过转换&core::cell::UnsafeCell<T>
来实现。 - 对于内部填充字节和
repr(Rust)
结构是否可用于TearCell
存在疑问但要求Pod
可使验证更简单。 - 作者不认为该代码会对所有人有用且强调使用时应充分意识到可能的错误。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。