MST

星途 面试题库

面试题:Rust多线程环境下如何通过Arc和Mutex实现简单的内存共享

请描述在Rust中,使用Arc(原子引用计数)和Mutex(互斥锁)在多线程环境下实现内存共享的基本步骤,并给出一个简单的示例代码,示例中至少包含两个线程对共享数据进行读写操作。
35.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 基本步骤

    • 引入必要的包:在Rust中,使用std::sync::{Arc, Mutex}来引入ArcMutex
    • 创建共享数据:将需要共享的数据用Mutex包裹,再用Arc进行原子引用计数包装,这样数据可以在多个线程间安全共享。
    • 创建线程:使用std::thread::spawn创建线程,并将Arc<Mutex<T>>类型的共享数据传递给线程。
    • 在线程中操作共享数据:获取Mutex的锁(lock方法),如果获取成功,就可以对共享数据进行读写操作,操作完成后释放锁。
  2. 示例代码

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    // 创建共享数据,用Mutex包裹,再用Arc包装
    let shared_data = Arc::new(Mutex::new(0));

    let mut handles = vec![];

    for _ in 0..2 {
        // 克隆Arc,每个线程都有自己的引用
        let data = Arc::clone(&shared_data);
        let handle = thread::spawn(move || {
            // 获取锁
            let mut num = data.lock().unwrap();
            // 对共享数据进行读写操作
            *num += 1;
            println!("Thread updated data to: {}", *num);
        });
        handles.push(handle);
    }

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