1 个不稳定版本
0.1.0 | 2023 年 10 月 24 日 |
---|
#665 在 并发 中
100KB
2K SLoC
KCAS
KCAS 是一个无锁的多字比较和交换库。它与 no_std
兼容,并且可以选择不分配堆上的内存。因为它只需要单宽度的原子比较和交换,所以在大多数平台上都是无锁的,包括 RISC-V、AArch64 和 x86-64。
入门
要在项目中使用 kcas
,请将以下内容包含在 Cargo.toml
中。
[dependencies]
kcas = "0.1.0"
对于 no_std
项目,还需要设置 default-features = false
。如果您的 no_std
项目允许分配,您可以将 features = ["alloc"]
设置为更多选项。
有关如何使用库的示例和详细信息,请参阅 kcas
文档。
计划的工作
- 额外测试 -
KCAS
通过了 [Shuttle] 测试的数十亿次迭代,但由于 Shuttle 假设SeqCst
一致性,我们还应使用 Loom 进行测试。此外,虽然KCAS
在 x86-64 上通过了常规并发测试,但我们还希望在 AArch64 和 RISC-V 上运行测试。 - 基准测试 -
KCAS
的无分配自由是以需要比最先进的多字 CAS 算法更多的 CAS 操作为代价的。我们希望在各种情况下对KCAS
与其他多字 CAS 算法进行基准测试,以说明在不同情况下的行为,包括不受限制和内存受限的情况。 - 无等待实现 - 如文档中
Limitations
部分所述,KCAS
目前不适合用于需要将大量位数分配给值和大量线程的情况。计划了一个替代辅助机制,该机制将减少从值中移除的位数到 1。这种机制也可能使算法无等待。
许可
此库可以在 MIT 许可证 或 Apache 许可证(版本 2.0) 下使用。
依赖关系
~2–28MB
~404K SLoC