Sobes.tech
Middle

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

  • std::timed_mutex: Hetzelfde als std::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 van std::recursive_mutex en std::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.