#lock-free #cas #no-alloc #mwcas #mcas

no-std kcas

一个无锁、无分配的多字比较和交换库

1 个不稳定版本

0.1.0 2023 年 10 月 24 日

#665并发

MIT/Apache

100KB
2K SLoC

KCAS

build status docs rustc version 1.63+ kcas latest version

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 文档

计划的工作

  1. 额外测试 - KCAS 通过了 [Shuttle] 测试的数十亿次迭代,但由于 Shuttle 假设 SeqCst 一致性,我们还应使用 Loom 进行测试。此外,虽然 KCAS 在 x86-64 上通过了常规并发测试,但我们还希望在 AArch64 和 RISC-V 上运行测试。
  2. 基准测试 - KCAS 的无分配自由是以需要比最先进的多字 CAS 算法更多的 CAS 操作为代价的。我们希望在各种情况下对 KCAS 与其他多字 CAS 算法进行基准测试,以说明在不同情况下的行为,包括不受限制和内存受限的情况。
  3. 无等待实现 - 如文档中 Limitations 部分所述,KCAS 目前不适合用于需要将大量位数分配给值和大量线程的情况。计划了一个替代辅助机制,该机制将减少从值中移除的位数到 1。这种机制也可能使算法无等待。

许可

此库可以在 MIT 许可证Apache 许可证(版本 2.0) 下使用。

依赖关系

~2–28MB
~404K SLoC