如何在多线程环境下安全共享可变状态?详解互斥锁 Mutex 与读写锁 RwLock 的死锁预防及内存屏障机制。

1. Arc<Mutex<T>> 黄金拍档

在多线程中修改计数器:

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

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

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

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

    println!("最终计数值: {}", *counter.lock().unwrap());
}