Sobes.tech
Middle

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

  • std::timed_mutex: To isté ako std::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ácia std::recursive_mutex a std::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ť.