2 个不稳定版本
0.2.0 | 2022年2月17日 |
---|---|
0.1.0 | 2022年2月17日 |
908 在 并发 中排名
每月下载量740次
用于 verneuil
28KB
550 行
奎宁
奎宁实现了类似 Option<Box<T>>
(MonoBox
) 和 Option<Arc<T>>
(MonoArc
) 的容器,这些容器的写操作是单次的。
这些单次写入的容器可以通过简单的 Ordering::Acquire
加载进行读取;其他读取操作的性能类似于 Box
和 Arc
。在写入端,原子更新通过比较和交换实现,只有第一个会成功。
代码比例如 ArcSwap 简单(并且可能更快),因为它利用了这些单次写入容器更新的单调性。这尤其适用于读取,但更新也避免了与潜在并发读取者的大量协调开销。
当原子容器只能从 None
单调地过渡到 Some
,并保持在那里时,我们可以实现简单的更新算法,而不必担心从容器派生的引用的生存期:一旦我们观察到 Some
值,容器就可以被信任为我们保持其活性(直到容器安全地被丢弃)。这个技巧的一般形式适用于任何拥有单调增加资源集的容器,直到容器本身被销毁。