Welke soorten mutexen bestaan er in de standaardbibliotheek van C++?
sobes.tech AI
Antwoord van AI
In de standaardbibliotheek van C++ (vanaf C++11) zijn de volgende soorten mutexen gedefinieerd:
-
std::mutex: Basis, niet-rekursieve mutex. Een thread dat het bezit, kan het niet opnieuw verkrijgen zonder het eerst vrij te geven. Een poging om het opnieuw te verkrijgen door hetzelfde thread leidt tot ongedefinieerd gedrag. -
std::recursive_mutex: Recursieve mutex. Staat toe dat hetzelfde thread het meerdere keren verwerft. Het aantal verwervingen en vrijgaven moet overeenkomen zodat de mutex beschikbaar is voor andere threads. Verhoogt de overhead vergeleken metstd::mutex. -
std::timed_mutex: Hetzelfde alsstd::mutex, maar met de mogelijkheid om het te proberen te verkrijgen met een timeout (try_lock_for,try_lock_until). Handig om deadlocks in sommige gevallen te voorkomen. -
std::recursive_timed_mutex: Combinatie vanstd::recursive_mutexenstd::timed_mutex, die recursieve verwerving met timeout mogelijk maakt.
std::shared_mutex (sinds C++17) is een mutex met gedeelde toegang (lezen/schrijven), maar behoort niet tot de basis "soorten" mutexen in dezelfde zin als hierboven genoemd, hoewel het wordt gebruikt voor het synchroniseren van toegang tot bronnen. Het staat meerdere threads toe om gelijktijdig te lezen, maar slechts één thread te schrijven.