MST

星途 面试题库

面试题:Rust中原子操作类型及简单应用

在Rust中,列举至少两种原子操作类型,并说明它们适用于哪些场景?请编写一个简单示例,展示使用其中一种原子操作类型实现多线程间共享数据的同步。
14.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 原子操作类型
    • AtomicBool:适用于需要在多线程间共享一个布尔值并进行原子操作的场景,比如控制多线程程序的全局开关。
    • AtomicI32:适用于需要在多线程间共享一个32位整数并进行原子操作的场景,例如在多线程环境下的计数器。
  2. 示例(使用AtomicI32实现多线程间共享数据的同步)
use std::sync::{Arc, Mutex};
use std::thread;
use std::sync::atomic::{AtomicI32, Ordering};

fn main() {
    let counter = Arc::new(AtomicI32::new(0));
    let mut handles = vec![];

    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            for _ in 0..1000 {
                counter.fetch_add(1, Ordering::SeqCst);
            }
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("Final counter value: {}", counter.load(Ordering::SeqCst));
}

在这个示例中,我们创建了一个AtomicI32类型的计数器counter,并在10个线程中对其进行fetch_add原子操作,每个线程执行1000次加法。Ordering::SeqCst保证了操作的顺序一致性。最后输出最终的计数器值。