Maison >développement back-end >C++ >Comment les mutex empêchent-ils les conditions de concurrence dans la programmation multithread ?
Concepts mutex : un didacticiel simplifié
Les mutex, abréviation de verrous d'exclusion mutuelle, empêchent plusieurs threads d'accéder simultanément aux ressources partagées. Pour comprendre leur fonctionnement, envisagez une analogie :
L'exemple de cabine téléphonique
Imaginez une seule cabine téléphonique avec une poignée de porte. Les gens (fils) font la queue pour utiliser le téléphone, mais seule la personne qui saisit la poignée de porte peut l'utiliser. Au moment où ils lâchent prise, une autre personne peut prendre son tour.
Dans cette analogie :
Mutex Logic
Un thread acquiert un verrou sur un mutex en appelant pthread_mutex_lock(&mutex). Cela marque une région de code comme exclusive à ce thread.
Une fois que le thread a fini d'exécuter ce code, il libère le verrou en appelant pthread_mutex_unlock(&mutex). Cela signale aux autres threads qu'ils peuvent désormais acquérir le verrou et exécuter le code protégé.
Exemple de mutex simple
Le code C 11 suivant illustre le concept de mutex :
#include <iostream> #include <thread> #include <mutex> std::mutex m; int i = 0; void makeACallFromPhoneBooth() { m.lock(); // Thread acquires lock on mutex (grabs door handle) std::cout << i << " Hello Wife" << std::endl; // Protected code i++; // No other thread can modify i while lock is held m.unlock(); // Thread releases lock (lets go of door handle) } int main() { std::thread man1(makeACallFromPhoneBooth); std::thread man2(makeACallFromPhoneBooth); std::thread man3(makeACallFromPhoneBooth); man1.join(); man2.join(); man3.join(); return 0; }
Dans cet exemple, trois threads (personnes) tentent d'utiliser une ressource partagée (le téléphone). Le mutex garantit qu'un seul thread peut accéder à la ressource à la fois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!