Quali tipi di mutexes esistono nella libreria standard di C++?
sobes.tech AI
Risposta dell'AI
Nella libreria standarde di C++ (a partire da C++11) sono definiti i seguenti tipi di mutex:
-
std::mutex: Mutex di base, non ricorsivo. Un thread che lo possiede non può riacquisirlo senza rilasciarlo prima. Tentare di riacquisirlo dallo stesso thread porta a un comportamento indefinito. -
std::recursive_mutex: Mutex ricorsivo. Permette a uno stesso thread di acquisirlo più volte. Il numero di acquisizioni e rilasci deve corrispondere affinché il mutex sia disponibile per altri thread. Aumenta i costi rispetto astd::mutex. -
std::timed_mutex: Uguale astd::mutex, ma con la possibilità di tentare di acquisirlo con un timeout (try_lock_for,try_lock_until). Utile per evitare deadlock in alcuni casi. -
std::recursive_timed_mutex: Combinazione distd::recursive_mutexestd::timed_mutex, che permette acquisizioni ricorsive con timeout.
std::shared_mutex (da C++17) è un mutex con accesso condiviso (lettura/scrittura), ma non appartiene ai "tipi" di mutex di base nello stesso senso di quelli sopra elencati, anche se viene usato per sincronizzare l'accesso alle risorse. Permette a molti thread di leggere contemporaneamente, ma solo a un thread di scrivere.