MST

星途 面试题库

面试题:Rust中Mutex和Arc在简单多线程场景的应用

假设有一个共享的整数变量,需要在多个线程中对其进行累加操作。请用Rust编写代码,使用`Mutex`和`Arc`来确保线程安全。简要解释`Mutex`和`Arc`在这里分别起到什么作用。
26.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::sync::{Arc, Mutex};
use std::thread;

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

    for _ in 0..10 {
        let shared_variable = Arc::clone(&shared_variable);
        let handle = thread::spawn(move || {
            let mut num = shared_variable.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

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

    let final_value = shared_variable.lock().unwrap();
    println!("Final value: {}", *final_value);
}

Mutex的作用

Mutex(互斥锁)用于保护共享数据,确保在同一时间只有一个线程可以访问共享变量。在代码中,通过shared_variable.lock().unwrap()获取锁,这使得只有获取到锁的线程能够对共享变量*num进行操作,其他线程在锁被占用时会等待,从而避免数据竞争,保证线程安全。

Arc的作用

Arc(原子引用计数)用于在多个线程间安全地共享数据。它允许数据在多个线程间传递,并且在引用计数为0时自动释放内存。在代码中,Arc包装了Mutex,使得Mutex可以在多个线程间传递,因为Arc是线程安全的,满足了多个线程共享数据的需求。