Sobes.tech
Middle

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í s std::mutex.

  • std::timed_mutex: Stejný jako std::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: Kombinace std::recursive_mutex a std::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.