MST
星途 面试题库

面试题:Rust中Rust Mutex的基础使用场景

请阐述在Rust语言中,Mutex通常在哪些场景下使用,并给出一个简单示例代码说明如何通过Mutex来保护共享数据,示例需包含多线程访问共享数据的情况。
19.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Mutex的使用场景

  1. 多线程环境下共享数据保护:当多个线程需要访问和修改共享数据时,为防止数据竞争(race condition),Mutex可用于保护共享数据,确保同一时间只有一个线程能访问该数据。
  2. 资源管理:在多线程程序中对一些共享资源(如文件句柄、数据库连接等)的访问控制,避免多个线程同时操作导致资源损坏或不一致。

示例代码

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

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

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

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

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

在上述代码中:

  1. 首先创建了一个Arc<Mutex<i32>>类型的共享数据,Arc用于在多个线程间共享所有权,Mutex用于保护共享数据。
  2. 使用thread::spawn创建10个线程,每个线程获取Mutex的锁,对共享数据进行加1操作。
  3. 主线程等待所有子线程完成后,再次获取锁并打印最终的共享数据值。这样通过Mutex有效地保护了共享数据,避免了数据竞争。