use std::sync::atomic::{AtomicI32, Ordering};
fn main() {
// 创建一个原子整数
let atomic_num = AtomicI32::new(5);
// 尝试执行比较与交换操作
let success = atomic_num.compare_and_swap(
5, // 预期值,即当前原子变量应该持有的值
10, // 新值,如果当前原子变量的值等于预期值,则将其更新为这个新值
Ordering::SeqCst // 内存序,这里使用最强的顺序一致性
);
if success == 5 {
println!("比较与交换操作成功,新值为: {}", atomic_num.load(Ordering::SeqCst));
} else {
println!("比较与交换操作失败,当前值为: {}", success);
}
}
- 创建原子整数:
let atomic_num = AtomicI32::new(5);
创建一个初始值为5的 AtomicI32
类型的原子整数。AtomicI32
是Rust标准库提供的用于原子操作的32位整数类型。
- 执行比较与交换操作:
let success = atomic_num.compare_and_swap(5, 10, Ordering::SeqCst);
调用 compare_and_swap
方法,该方法接收三个参数:预期值(这里是5),新值(这里是10),以及内存序(这里使用 Ordering::SeqCst
,它保证所有线程都以相同顺序观察到内存访问,是最强的内存序)。该方法会检查原子变量当前的值是否等于预期值,如果相等,则将原子变量的值更新为新值,并返回原子变量的旧值;如果不相等,则不更新原子变量的值,并返回原子变量的当前值。
- 检查操作结果:根据
compare_and_swap
方法返回的值判断操作是否成功。如果返回值等于预期值,则说明操作成功,输出新值;否则说明操作失败,输出当前值。