Jaké typy mutexů existují v standardní knihovně C++?
sobes.tech AI
Odpověď od AI
Ve standardní knihovně C++ (od C++11) jsou definovány následující typy mutexů:
-
std::mutex: Základní, neinrekursivní mutex. Vlákno, které jej vlastní, jej nemůže znovu získat bez jeho předchozího uvolnění. Pokus o jeho opětovné získání stejným vláknem vede k nedefinovanému chování. -
std::recursive_mutex: Rekurzivní mutex. Umožňuje stejnému vláknu jej získat vícekrát. Počet získání a uvolnění musí odpovídat, aby byl mutex dostupný jiným vláknům. Zvyšuje náklady ve srovnání sstd::mutex. -
std::timed_mutex: Stejný jakostd::mutex, ale s možností pokusu o získání s časovým limitem (try_lock_for,try_lock_until). Užitečné k prevenci vzájemného blokování v určitých případech. -
std::recursive_timed_mutex: Kombinacestd::recursive_mutexastd::timed_mutex, umožňující rekurzivní získání s časovým limitem.
std::shared_mutex (od C++17) je mutex s sdíleným přístupem (čtení/zápis), ale nepatří do základních "druhů" mutexů ve stejném smyslu jako výše uvedené, i když se používá ke synchronizaci přístupu ke zdrojům. Umožňuje více vláknům číst současně, ale pouze jednomu vláknu zapisovat.