Mutex
MutexT behind a read-only interface (another form of interior mutability):
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());}
Notice how we have a impl
This slide should take about 14 minutes.
Mutexin Rust looks like a collection with just one element —- the protected data.- It is not possible to forget to acquire the mutex before accessing the protected data.
- You can get an
&mut Tfrom an&Mutex<T>by taking the lock. TheMutexGuardensures that the&mut Tdoesn’t outlive the lock being held. Mutex<T>implements bothSendandSyncif and only ifTimplementsSend.- A read-write lock counterpart:
RwLock. - Why does
lock()return aResult?- If the thread that held the
Mutexpanicked, theMutexbecomes “poisoned” to signal that the data it protected might be in an inconsistent state. Callinglock()on a poisoned mutex fails with a PoisonError. You can callinto_inner()on the error to recover the data regardless.
- If the thread that held the