Aké typy mutexov existujú v štandardnej knižnici C++?
sobes.tech AI
Odpoveď od AI
V štandardnej knižnici C++ (od C++11) sú definované nasledujúce typy mutexov:
-
std::mutex: Základný, neinrekursívny mutex. Vlákno, ktoré ho vlastní, ho nemôže znovu získať bez jeho predchádzajúceho uvoľnenia. Pokus o jeho opätovné získanie rovnakým vláknom vedie k neurčitému správaniu. -
std::recursive_mutex: Rekurzívny mutex. Umožňuje rovnakému vláknu ho získať viackrát. Počet získaní a uvoľnení musí zodpovedať, aby bol mutex dostupný pre iné vlákna. Zvyšuje náklady v porovnaní sstd::mutex. -
std::timed_mutex: To isté akostd::mutex, ale s možnosťou pokusu o získanie s časovým limitom (try_lock_for,try_lock_until). Užitečné na prevenciu vzájomného blokovania v určitých prípadoch. -
std::recursive_timed_mutex: Kombináciastd::recursive_mutexastd::timed_mutex, ktorá umožňuje rekurzívne získanie s časovým limitom.
std::shared_mutex (od C++17) je mutex s deleným prístupom (čítanie/písanie), ale nepatrí do základných "typov" mutexov v rovnakom zmysle ako vyššie uvedené, hoci sa používa na synchronizáciu prístupu k zdrojom. Umožňuje viacerým vláknam čítať súčasne, ale len jednému vláknu zapisovať.