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