Mutex
Mutex<T>
可確保執行互斥功能,「並」在唯讀介面背後授予 T
的可變存取權:
use std::sync::Mutex; fn main() { let v = Mutex::new(vec![10, 20, 30]); println!("v: {:?}", v.lock().unwrap()); { let mut guard = v.lock().unwrap(); guard.push(40); } println!("v: {:?}", v.lock().unwrap()); }
請留意我們如何進行 impl<T: Send> Sync for Mutex<T>
的概括性 實作。
- Rust 中的
Mutex
就像是只有一個元素的集合,也就是受保護的資料。- 必須先取得互斥鎖,才能存取受保護的資料。
- 只要使用這個鎖,就能從
&Mutex<T>
取得&mut T
。MutexGuard
可確保&mut T
的壽命不會超過所持有的鎖。 Mutex<T>
implements bothSend
andSync
iff (if and only if)T
implementsSend
.- 可讀寫的對應鎖 -
RwLock
。 - 為何
lock()
會傳回Result
?- 如果持有
Mutex
的執行緒發生恐慌,Mutex
就會「中毒」,指出 其保護的資料可能處於不一致的狀態。如果對已中毒的互斥鎖呼叫lock()
, 會發生PoisonError
錯誤。無論如何,你都可以對錯誤呼叫into_inner()
來復原 資料。
- 如果持有