MST

星途 面试题库

面试题:Rust原子操作中比较与交换的基本实现

在Rust中,如何使用标准库提供的原子类型来实现一个简单的比较与交换(Compare - And - Swap,CAS)操作?请给出具体代码示例,并解释每一步的作用。
41.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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);
    }
}
  1. 创建原子整数let atomic_num = AtomicI32::new(5); 创建一个初始值为5的 AtomicI32 类型的原子整数。AtomicI32 是Rust标准库提供的用于原子操作的32位整数类型。
  2. 执行比较与交换操作let success = atomic_num.compare_and_swap(5, 10, Ordering::SeqCst); 调用 compare_and_swap 方法,该方法接收三个参数:预期值(这里是5),新值(这里是10),以及内存序(这里使用 Ordering::SeqCst,它保证所有线程都以相同顺序观察到内存访问,是最强的内存序)。该方法会检查原子变量当前的值是否等于预期值,如果相等,则将原子变量的值更新为新值,并返回原子变量的旧值;如果不相等,则不更新原子变量的值,并返回原子变量的当前值。
  3. 检查操作结果:根据 compare_and_swap 方法返回的值判断操作是否成功。如果返回值等于预期值,则说明操作成功,输出新值;否则说明操作失败,输出当前值。