Sobes.tech
Middle

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 de std::recursive_mutex et std::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.