MST

星途 面试题库

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

请描述在Rust中,如何使用`Mutex`和`Arc`来实现多个线程安全地访问和修改一个共享的整数变量。并写出相应的代码示例,包括创建线程、共享变量以及对变量的操作逻辑。
15.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 概念说明
    • Arc(Atomically Reference - Counted)是一个线程安全的引用计数智能指针,用于在多个线程间共享数据。
    • Mutex(Mutual Exclusion)是一种同步原语,用于保证同一时间只有一个线程可以访问其保护的数据,实现线程安全。
  2. 代码示例
use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    // 创建一个被Arc和Mutex保护的共享整数变量
    let shared_number = Arc::new(Mutex::new(0));

    let mut handles = vec![];
    for _ in 0..10 {
        // 克隆Arc,以便每个线程都有自己的引用
        let number = Arc::clone(&shared_number);
        let handle = thread::spawn(move || {
            // 锁定Mutex以获取对共享变量的可变引用
            let mut num = number.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

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

    // 最后打印共享变量的值
    println!("Final value: {}", *shared_number.lock().unwrap());
}

在上述代码中:

  • 首先创建了一个被ArcMutex包裹的整数变量shared_number
  • 然后通过for循环创建了10个线程,每个线程克隆Arc的引用,然后锁定Mutex获取共享变量的可变引用,对其进行加1操作。
  • 主线程通过join等待所有子线程完成,最后打印共享变量的最终值。