MST

星途 面试题库

面试题:Rust原子操作在并发场景下的基础应用

在Rust中,假设你要实现一个多线程计数器,使用原子操作来保证线程安全,简述实现思路并给出关键代码片段。
40.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 实现思路
    • 使用std::sync::Arc来共享计数器的值,因为Arc是线程安全的引用计数智能指针,允许多个线程持有它。
    • 使用std::sync::atomic::AtomicUsize来存储计数器的值,AtomicUsize提供了原子操作方法,能保证多线程环境下对计数器的操作是线程安全的。
    • 创建多个线程,每个线程对AtomicUsize的值进行原子操作(如增加)。
  2. 关键代码片段
use std::sync::{Arc, Mutex};
use std::thread;
use std::sync::atomic::{AtomicUsize, Ordering};

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

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

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

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