Ce tipuri de mutex-uri există în biblioteca standard C++?
sobes.tech AI
Răspuns de la AI
În biblioteca standard C++ (începând cu C++11) sunt definite următoarele tipuri de mutexuri:
-
std::mutex: Mutex de bază, non-recursiv. Un fir de execuție care îl deține nu poate să îl recupereze fără să îl elibereze mai întâi. Încercarea de a-l recâștiga de același fir duce la comportament nedefinit. -
std::recursive_mutex: Mutex recursiv. Permite aceluiași fir să îl captureze de mai multe ori. Numărul de capturi și eliberări trebuie să coincidă pentru ca mutexul să fie disponibil pentru alte fire. Crește costurile comparativ custd::mutex. -
std::timed_mutex: La fel castd::mutex, dar cu posibilitatea de a încerca să îl captureze cu un timeout (try_lock_for,try_lock_until). Este util pentru a preveni blocajele reciproce în anumite cazuri. -
std::recursive_timed_mutex: Combinareastd::recursive_mutexșistd::timed_mutex, permițând capturarea recursivă cu timeout.
std::shared_mutex (din C++17) este un mutex cu acces partajat (citire/scriere), dar nu aparține tipurilor de mutex de bază în același sens ca cele enumerate mai sus, deși este folosit pentru sincronizarea accesului la resurse. Permite multor fire să citească simultan, dar doar unui fir să scrie.