Mutex

Наследует: RefCounted < Object

Двоичный Semaphore для синхронизации нескольких Thread-ов.

Описание

Мьютекс синхронизации (взаимное исключение). Он используется для синхронизации нескольких потоков и эквивалентен бинарному семафору. Он гарантирует, что только один поток может одновременно получить доступ к критической секции.

Это реентрантный мьютекс, то есть он может быть заблокирован несколько раз одним потоком при условии, что он также разблокирует его столько же раз.

Предупреждение: Для обеспечения надлежащей очистки без сбоев или взаимоблокировок должны быть выполнены следующие условия:

  • Когда счетчик ссылок мьютекса достигает нуля и, следовательно, он уничтожается, ни один поток (включая тот, на котором произойдет уничтожение) не должен иметь его заблокированным.

  • Когда счетчик ссылок потока достигает нуля и, следовательно, он уничтожается, у него не должно быть заблокированных мьютексов.

Обучающие материалы

Методы

void

lock()

bool

try_lock()

void

unlock()


Описания метода

void lock() 🔗

Блокирует этот Mutex, блокирует до тех пор, пока он не будет разблокирован текущим владельцем.

Примечание: Эта функция возвращает без блокировки, если поток уже владеет мьютексом.


bool try_lock() 🔗

Пытается заблокировать этот Mutex, но не блокирует. Возвращает true в случае успеха, false в противном случае.

Примечание: Эта функция возвращает true, если поток уже владеет Mutex.


void unlock() 🔗

Разблокирует этот Mutex, передавая его другим потокам.

Примечание: Если поток вызывал lock() или try_lock() несколько раз, уже владея мьютексом, он должен также вызвать unlock() такое же количество раз, чтобы правильно его разблокировать.

Предупреждение: Вызов unlock() больше раз, чем lock() в данном потоке, в результате чего происходит попытка разблокировать незаблокированный мьютекс, является неправильным и может привести к сбоям или взаимоблокировкам.