Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Mutex

Успадковує: RefCounted < Object

Для синхронізації кількох Threads.

Опис

М'ютекс синхронізації (взаємне виключення). Використовується для синхронізації кількох Thread і еквівалентний двійковому Semaphore. Він гарантує, що лише один потік може отримати доступ до критичної секції одночасно.

Це реентерантний м'ютекс, що означає, що він може бути заблокований кілька разів одним потоком, за умови, що він також розблокує його стільки ж разів.

Попередження: Щоб забезпечити належне очищення без збоїв або глухих блокувань, повинні бути виконані такі умови:

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

  • Коли кількість посилань Thread досягає нуля і тому він знищується, він не повинен мати жодного заблокованого м'ютексу.

Посібники

Методи

void

lock()

bool

try_lock()

void

unlock()


Описи методів

void lock() 🔗

Locks this Mutex, блоки до тих пір, поки він не розблокував поточний власник.

Примітка: Ця функція повертається без блокування, якщо нитка вже має право власності на грязь.


bool try_lock() 🔗

Перемикаючи це Mutex, але не блокує. true на успіх, false інакше.

Примітка: Ця функція повертає true, якщо нитка вже має право власності на мутекс.


void unlock() 🔗

Розблоковує цей Mutex, залишаючи його іншим потокам.

Примітка: Якщо потік викликав lock() або try_lock() кілька разів, вже маючи право власності на мьютекс, він також повинен викликати unlock() таку ж кількість разів, щоб правильно його розблокувати.

Попередження: Виклик unlock() більше разів, ніж lock() у даному потоці, що призводить до спроби розблокувати незаблокований мьютекс, є неправильним і може призвести до збоїв або взаємоблокувань.