Maison >développement back-end >C++ >Qu'est-ce qu'un Mutex et comment fonctionne-t-il dans les environnements multithread ?
Exemple et explication de mutex
Les mutex, ou objets d'exclusion mutuelle, fournissent un mécanisme de contrôle de l'accès aux ressources partagées dans des environnements multithread. Comprendre leur fonctionnement peut être difficile, car leur syntaxe peut sembler contre-intuitive à première vue.
Syntaxe Mutex
La syntaxe de pthread_mutex_lock(&mutex1) suggère que le mutex lui-même est verrouillé. Cependant, ce n'est pas le mutex mais plutôt la région de code protégée par celui-ci qui est verrouillée. Cela empêche les autres threads d'accéder au code pendant qu'il est exécuté par le thread actuel.
Utilisation de Mutex et attribution de verrouillage
Les threads déterminent l'état verrouillé du code en observant les barrières de mémoire qui sont établies lors de l'acquisition et de la libération d'un mutex. Les barrières de mémoire garantissent que les modifications apportées à la mémoire par un thread sont visibles par les autres threads en temps opportun.
Sections critiques
Les sections critiques ne sont pas les mêmes que les mutex. Ils sont disponibles uniquement sous Windows et font référence à des régions de code protégées par des mutex. Les sections critiques elles-mêmes ne fournissent pas de contrôle d'accès simultané.
Exemple de mutex le plus simple
Le code suivant démontre l'utilisation de base d'un mutex :
#include <iostream> #include <thread> #include <mutex> std::mutex m; int i = 0; void makeACallFromPhoneBooth() { m.lock(); std::cout << i << " Hello Wife" << std::endl; i++; m.unlock(); } int main() { std::thread man1(makeACallFromPhoneBooth); std::thread man2(makeACallFromPhoneBooth); std::thread man3(makeACallFromPhoneBooth); man1.join(); man2.join(); man3.join(); return 0; }
Analogie Mutex
Pour aider à visualiser le concept, considérons une cabine téléphonique où plusieurs personnes essaient de passer des appels. La poignée de porte représente le mutex. Seule la personne tenant la poignée de porte (mutex verrouillé) peut accéder au téléphone (exécuter le code protégé). Une fois qu'ils ont relâché la poignée de porte (déverrouiller le mutex), une autre personne peut l'acquérir.
En comprenant le concept des mutex et en les employant efficacement, les développeurs peuvent garantir que les ressources partagées sont accessibles de manière sûre et synchronisée, empêchant ainsi l'accès aux ressources partagées. corruption de données et conditions de concurrence critique dans les environnements multithread.
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!