Quels types de mutexes existent dans la bibliothèque standard de C++?
sobes.tech IA
Réponse de l'IA
Dans la bibliothèque standard de C++ (à partir de C++11), les types de mutex suivants sont définis:
-
std::mutex: Mutex de base, non récursif. Un thread qui le possède ne peut pas le reprendre sans le libérer d'abord. Tenter de le reprendre par le même thread conduit à un comportement indéfini. -
std::recursive_mutex: Mutex récursif. Permet à un même thread de le prendre plusieurs fois. Le nombre de prises et de libérations doit correspondre pour que le mutex soit disponible pour d'autres threads. Augmente les coûts par rapport àstd::mutex. -
std::timed_mutex: Identique àstd::mutex, mais avec la possibilité d'essayer de le prendre avec un délai d'attente (try_lock_for,try_lock_until). Utile pour éviter les blocages mutuels dans certains cas. -
std::recursive_timed_mutex: Combinaison destd::recursive_mutexetstd::timed_mutex, permettant une prise récursive avec délai.
std::shared_mutex (à partir de C++17) est un mutex avec accès partagé (lecture/écriture), mais il ne fait pas partie des "types" de mutex de base dans le même sens que ceux mentionnés ci-dessus, bien qu'il soit utilisé pour synchroniser l'accès aux ressources. Il permet à plusieurs threads de lire simultanément, mais un seul thread peut écrire.