5.2 `Mutex`
02-
Mutex — Comprehensive Rust1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/concurrency/shared-state/mutex.html
5.2 Mutex
Mutex<T> 确保互斥,并允许在只读接口背后对 T 进行可变访问(内部可变性的另一种形式):
| |
注意我们有一个 impl<T: Send> Sync for Mutex<T> 的 blanket 实现。
- Rust 中的
Mutex看起来像只有一个元素的集合——受保护的数据。
- 不可能忘记在访问受保护数据之前获取互斥锁。
- 你可以通过加锁从
&Mutex<T>得到&mut T。MutexGuard确保&mut T不会在锁持有期之外存活。- 当且仅当
T实现Send时,Mutex<T>同时实现Send与Sync。- 读写锁对应物:
RwLock。- 为什么
lock()返回Result?
- 若持有
Mutex的线程 panic 了,Mutex会变成「中毒」(poisoned),以表明它保护的数据可能处于不一致状态。对中毒的互斥锁调用lock()会以PoisonError失败。你可以在错误上调用into_inner()无论如何恢复数据。