#x86-64 #atomic #pointers #version #compare #exchange #stamped

nightly atomic-stamped-ptr

AtomicStampedPtr for x86_64

2 个版本

使用旧的 Rust 2015

0.1.1 2016 年 9 月 6 日
0.1.0 2016 年 8 月 21 日

76#exchange

每月下载 23
concurrent-stack 中使用

MIT 许可证

10KB
178 行代码(不包括注释)

使用戳记的 AtomicPtr 避免ABA问题

用法

在您的 Cargo.toml 中添加以下内容

[dependencies]
atomic-stamped-ptr = "0.1.0"

并在您的 crate 根目录中添加以下内容

extern crate atomic_stamped_ptr;

入门

将指针存储到 AtomicStampedPtr 原子性中

let a = AtomicStampedPtr::new(ptr);

a.store(ptr);

从 AtomicStampedPtr 原子性中获取指针和版本

let (ptr, version) = a.load();

使用 AtomicStampedPtr 原子性交换指针

let new_ptr = a.swap(ptr);

比较和交换

let (p, v) = a.compare_and_swap((ptr, version), new_ptr);
if (p, v) == (ptr, version) {
    // Success
} else {
    // Failure
}

比较和交换

if let Ok((p, v)) == a.compare_exchange((ptr, version), new_ptr) {
    // Success
} else {
    // Failure
}

lib.rs:

AtomicStampedPtr

无运行时依赖