Mutex
Eredita: RefCounted < Object
Un Semaphore binario per la sincronizzazione di più Thread.
Descrizione
Un mutex di sincronizzazione (mutua esclusione). Serve per sincronizzare più Thread ed è equivalente a un Semaphore binario. Garantisce che solo un thread alla volta possa accedere a una sezione critica.
Questo è un mutex rientrante, il che significa che può essere bloccato più volte da un thread, a condizione che lo sblocchi altrettante volte.
Attenzione: I mutex si devono utilizzare con attenzione per evitare deadlock.
Attenzione: Per garantire una pulizia corretta senza arresti anomali o deadlock, devono essere soddisfatte le seguenti condizioni:
Quando il conteggio dei riferimenti di un Mutex raggiunge zero e viene quindi distrutto, nessun thread (incluso quello su cui avverrà la distruzione) deve averlo bloccato.
Quando il conteggio dei riferimenti di un Thread raggiunge zero e viene quindi distrutto, non deve avere alcun mutex bloccato.
Tutorial
Metodi
void |
lock() |
try_lock() |
|
void |
unlock() |
Descrizioni dei metodi
void lock() 🔗
Blocca questo Mutex, blocca finché non viene sbloccato dal proprietario attuale.
Nota: Questa funzione restituisce senza bloccare se il thread ha già il possesso del mutex.
Tenta di bloccare questo Mutex, ma non blocca. Restituisce true in caso di successo, altrimenti false.
Nota: Questa funzione restituisce true se il thread ha già il possesso del mutex.
void unlock() 🔗
Sblocca questo Mutex, lasciandolo ad altri thread.
Nota: Se un thread chiama lock() o try_lock() più volte pur avendo già il possesso del mutex, deve anche chiamare unlock() lo stesso numero di volte per sbloccarlo correttamente.
Attenzione: Chiamare unlock() più volte di lock() su un determinato thread, finendo così per tentare di sbloccare un mutex non bloccato, è sbagliato e può causare crash o deadlock.