← 学习中心

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。

Mutex 与共享状态 - 生命科学与前沿科技学习平台 | 必学必会