Sobes.tech
Middle

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õrreldes std::mutex-ga.

  • std::timed_mutex: Sama mis std::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: Kombinatsioon std::recursive_mutex ja std::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.