Mutex
Mutex<T> ensures mutual exclusion and allows mutable access to T
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<T: Send> Sync for Mutex<T> blanket
implementation.
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 both- Sendand- Syncif and only if- Timplements- Send.
- 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 aPoisonError. You can callinto_inner()on the error to recover the data regardless.
 
- If the thread that held the