Sobes.tech
Middle

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 a std::mutex-hez képest.

  • std::timed_mutex: Ugyanaz, mint a std::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: A std::recursive_mutex és a std::timed_mutex kombiná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.