Rust中有CAS操作吗?

eeeeeeeeeeeeee

是的,Rust 支持 CAS(Compare-And-Swap)操作,主要通过 std::sync::atomic 模块中的原子类型来实现。


✅ 核心原子类型(支持 CAS)

Rust 提供以下原子类型,它们都支持 CAS 操作:

  • AtomicBool
  • AtomicIsize / AtomicUsize
  • AtomicI8 / AtomicU8
  • AtomicI16 / AtomicU16
  • AtomicI32 / AtomicU32
  • AtomicI64 / AtomicU64
  • AtomicPtr<T>

🧪 示例:使用 compare_exchange

use std::sync::atomic::{AtomicUsize, Ordering};

fn main() {
    let value = AtomicUsize::new(5);

    // CAS 操作:如果当前值是 5,则设置为 10
    let result = value.compare_exchange(
        5,                // 当前值期望是 5
        10,               // 要设置的新值
        Ordering::SeqCst, // 成功时的内存排序
        Ordering::SeqCst, // 失败时的内存排序
    );

    match result {
        Ok(prev) => println!("成功,原值: {}", prev),
        Err(actual) => println!("失败,当前值是: {}", actual),
    }
}

📌 内存排序说明(Ordering

  • Relaxed:不保证顺序(最快)
  • Acquire / Release:适合单向通信
  • SeqCst:全序一致性,最严格(推荐用于通用情况)

🚨 注意

  1. CAS 是 lock-free 的,但容易造成 自旋消耗,高并发下需谨慎。
  2. 如果你缓存的是结构体,可以考虑 AtomicPtr<T> 或配合 Arc<Atomic*> 使用。
  3. 对于复杂场景(如原子引用更新、哈希表 CAS),可以考虑使用 crossbeamdashmap 等库。

是否想实现某种具体用途的 CAS?比如锁实现、状态切换,或并发缓存结构?

posted on 2025-05-02 11:07  及途又八  阅读(39)  评论(0)    收藏  举报

导航