Mutex
Наследует: RefCounted < Object
Двоичный Semaphore для синхронизации нескольких Thread-ов.
Описание
Синхронизирующий мьютекс (взаимное исключение). Используется для синхронизации нескольких Thread и эквивалентен двоичному Semaphore. Он гарантирует, что только один поток может получить доступ к критическому разделу одновременно.
Это реентерабельный мьютекс, то есть он может быть заблокирован несколько раз одним потоком, при условии, что он также разблокирует его столько же раз.
Предупреждение: Мьютексы следует использовать осторожно, чтобы избежать взаимоблокировок.
Предупреждение: Чтобы обеспечить надлежащую очистку без сбоев или взаимоблокировок, должны быть выполнены следующие условия:
Когда счетчик ссылок Mutex достигает нуля и, следовательно, он уничтожается, ни один поток (включая тот, в котором произойдет уничтожение) не должен его блокировать.
Когда счетчик ссылок Thread достигает нуля и, следовательно, он уничтожается, у него не должно быть заблокированных мьютексов.
Обучающие материалы
Методы
void |
lock() |
try_lock() |
|
void |
unlock() |
Описания метода
void lock() 🔗
Блокирует этот Mutex, блокирует до тех пор, пока он не будет разблокирован текущим владельцем.
Примечание: Эта функция возвращает без блокировки, если поток уже владеет мьютексом.
Пытается заблокировать этот Mutex, но не блокирует. Возвращает true в случае успеха, false в противном случае.
Примечание: Эта функция возвращает true, если поток уже владеет Mutex.
void unlock() 🔗
Разблокирует этот Mutex, оставляя его другим потокам.
Примечание: Если поток вызвал lock() или try_lock() несколько раз, уже владея мьютексом, он также должен вызвать unlock() столько же раз, чтобы правильно разблокировать его.
Предупреждение: Вызов unlock() больше раз, чем lock() в данном потоке, в результате чего происходит попытка разблокировать незаблокированный мьютекс, является неправильным и может привести к сбоям или взаимоблокировкам.