Rust中有CAS操作吗?
eeeeeeeeeeeeee
是的,Rust 支持 CAS(Compare-And-Swap)操作,主要通过 std::sync::atomic 模块中的原子类型来实现。
✅ 核心原子类型(支持 CAS)
Rust 提供以下原子类型,它们都支持 CAS 操作:
AtomicBoolAtomicIsize/AtomicUsizeAtomicI8/AtomicU8AtomicI16/AtomicU16AtomicI32/AtomicU32AtomicI64/AtomicU64AtomicPtr<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:全序一致性,最严格(推荐用于通用情况)
🚨 注意
- CAS 是 lock-free 的,但容易造成 自旋消耗,高并发下需谨慎。
- 如果你缓存的是结构体,可以考虑
AtomicPtr<T>或配合Arc<Atomic*>使用。 - 对于复杂场景(如原子引用更新、哈希表 CAS),可以考虑使用
crossbeam、dashmap等库。
是否想实现某种具体用途的 CAS?比如锁实现、状态切换,或并发缓存结构?
浙公网安备 33010602011771号