Mutex
Mutex<T>
забезпечує взаємовиключення та дозволяє мутабельний доступ до T
за інтерфейсом лише для читання (інша форма внутрішньої мутабельності):
Зверніть увагу, що ми маємо impl<T: Send> Sync for Mutex<T>
загальну реалізацію.
Speaker Notes
This slide should take about 14 minutes.
Mutex
у Rust виглядає як колекція лише з одним елементом — захищеними даними.- Неможливо забути отримати м’ютекс перед доступом до захищених даних.
- Ви можете отримати
&mut T
від&Mutex<T>
, взявши блокування.MutexGuard
гарантує, що&mut T
не переживе утримуване блокування. Mutex<T>
реалізує якSend
, так іSync
тоді і тільки тоді колиT
реалізуєSend
.- Аналог блокування читання-запису:
RwLock
. - Чому
lock()
повертаєResult
?- Якщо потік, який утримував
Mutex
, запанікував,Mutex
стає “отруєним”, сигналізуючи про те, що дані, які він захищає, можуть перебувати в неузгодженому стані. Викликlock()
для отруєнного м’ютексу зазнає невдачі зPoisonError
. Ви можете викликатиinto_inner()
для помилки, щоб відновити дані незалежно від цього.
- Якщо потік, який утримував