Sobes.tech
Middle

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 a std::mutex.

  • std::timed_mutex: Uguale a std::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 di std::recursive_mutex e std::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.