Milyen típusú mutexek léteznek a C++ szabványos könyvtárában?
sobes.tech MI
Válasz az MI-től
A C++ szabványkönyvtárban (a C++11-től kezdve) a következő típusú mutexek vannak meghatározva:
-
std::mutex: Alap, nem rekurzív mutex. Egy szál, amely birtokolja, nem tudja újra megszerezni anélkül, hogy előtte felszabadítaná. Az ugyanazon szál által történő újra megszerzés kísérlete nem meghatározott viselkedést eredményez. -
std::recursive_mutex: Rekurzív mutex. Lehetővé teszi ugyanazon szálnak, hogy többször is megszerezze. A megszerzések és felszabadítások száma egyeznie kell, hogy a mutex más szálak számára elérhető legyen. Növeli a költségeket astd::mutex-hez képest. -
std::timed_mutex: Ugyanaz, mint astd::mutex, de időkorláttal próbálja meg megszerezni (try_lock_for,try_lock_until). Hasznos bizonyos esetekben a kölcsönös blokkolások elkerülésére. -
std::recursive_timed_mutex: Astd::recursive_mutexés astd::timed_mutexkombinációja, lehetővé téve rekurzív megszerzést időkorláttal.
A std::shared_mutex (a C++17-től) megosztott hozzáférésű (olvasás/írás) mutex, de nem tartozik a "bázistípus" mutexek közé ugyanabban az értelemben, mint a fent felsoroltak, bár a forrásokhoz való hozzáférés szinkronizálására használják. Lehetővé teszi, hogy több szál olvashasson egyidejűleg, de csak egy szál írhat.