Millised mutex tüübid on olemas C++ standardraamatukogus?
sobes.tech AI
Vastus AI-lt
Standartraamatukogus C++-s (no C++11) on defineeritud järgmised tüüpi mutexid:
-
std::mutex: Põhja, mitterekursiivne mutex. Sõlm, mis seda omab, ei saa seda uuesti haarata ilma seda eelnevalt vabastamata. Katse seda uuesti haarata sama niidiga viib määramatule käitumisele. -
std::recursive_mutex: Rekursiivne mutex. Annab ühe niidi haarata seda mitu korda. Haaramise ja vabastamise arv peab vastama, et mutex oleks kättesaadav teistele niitidele. Suurendab kulusid võrreldesstd::mutex-ga. -
std::timed_mutex: Sama misstd::mutex, kuid võimalusega proovida haarata seda ajapiiranguga (try_lock_for,try_lock_until). Kasulik teatud juhtudel vastastikuste blokeeringute vältimiseks. -
std::recursive_timed_mutex: Kombinatsioonstd::recursive_mutexjastd::timed_mutex, mis võimaldab rekursiivset haaramist ajapiiranguga.
std::shared_mutex (alates C++17-st) on mutex jagatud juurdepääsuga (lugemine/kirjutamine), kuid see ei kuulu põhiliikide "tüüpide" hulka samas mõttes nagu eespool loetletud, kuigi seda kasutatakse ressurssidele juurdepääsu sünkroniseerimiseks. See võimaldab paljudel niitidel lugeda samaaegselt, kuid ainult ühel niidil on õigus kirjutada.