Mutex 与 Arc 共享状态
Mutex<T> 互斥锁、Arc<Mutex<T>> 多线程共享、lock 返回 MutexGuard
Mutex 与 Arc 共享状态
Mutex<T> 保护数据——同一时刻只有一个线程能访问。配合 Arc 在多线程间共享。
学完本章你将: 掌握 Mutex lock、Arc<Mutex
Mutex 基础
rust
use std::sync::Mutex;
fn main() {
let m = Mutex::new(5);
{
let mut num = m.lock().unwrap(); // 获取锁
*num = 6; // 修改
} // lock 离开作用域——自动释放
println!("m = {:?}", m); // Mutex { data: 6 }
}
Arc> —— 多线程共享
rust
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 = Arc::clone(&counter);
let handle = thread::spawn(move || {
let mut num = counter.lock().unwrap();
*num += 1;
});
handles.push(handle);
}
for h in handles {
h.join().unwrap();
}
println!("结果: {}", *counter.lock().unwrap()); // 10
}
⚠️
lock()会阻塞直到获取锁。如果同一个线程试图两次 lock,会死锁——用try_lock()避免。