Mutex 与共享状态
Arc<Mutex<T>> 模式与毒化锁
本节你将能
用 Arc<Mutex<T>> 在多线程间安全共享可变状态。
直觉模型
Mutex 是「同一时间只许一人改账本」的门锁;Arc 负责把锁的钥匙复印给多个线程。
核心要点
lock()得到守卫;离开作用域自动解锁- 线程在持锁时 panic 可能导致毒化(poison);可用
into_inner恢复策略 - 优先缩小临界区;能消息传递就别共享可变
use std::sync::{Arc, Mutex};
use std::thread;
let c = Arc::new(Mutex::new(0));
let mut hs = vec![];
for _ in 0..4 {
let c = Arc::clone(&c);
hs.push(thread::spawn(move || { *c.lock().unwrap() += 1; }));
}
for h in hs { h.join().unwrap(); }
常见误区
在持锁时做耗时 IO——拖垮吞吐并增加死锁风险。
动手
用 Mutex 统计多线程单词计数(小规模 demo)。
互动
测验:为何常与 Arc 组合。
本节小结
下一节进入 async/await 与 Tokio。