Maison > Article > développement back-end > Comment fonctionne un mutex comme une poignée de porte de cabine téléphonique ?
Comprendre les concepts de mutex à travers une analogie du monde réel
Pour saisir la fonctionnalité des mutex, visualisons un scénario impliquant plusieurs individus et un téléphone stand. Chaque individu représente un fil conducteur, et la cabine téléphonique symbolise une ressource accessible à une seule personne à la fois.
Le rôle du Mutex comme « poignée de porte » :
Le mutex agit comme la poignée de porte de la cabine téléphonique, contrôlant l'accès à la ressource. Lorsqu’une personne saisit la poignée, elle verrouille efficacement la porte, empêchant ainsi les autres d’entrer. De même, un thread qui acquiert un verrou sur un mutex obtient un accès exclusif à la ressource protégée par le mutex.
Comment les threads déterminent l'état du verrouillage :
Les threads s'appuient sur un mécanisme appelé « memory fencing » pour déterminer si un mutex est verrouillé. La séparation de la mémoire garantit que l'état du verrouillage est synchronisé sur tous les threads, empêchant plusieurs threads d'accéder simultanément à la ressource protégée.
Unterscheidung zwischen Mutex und kritischem Abschnitt :
Sous Windows seuls les objets de section critiques offrent une alternative aux mutex. Les objets de section critique sont plus rapides et visibles uniquement par leur thread d'implémentation. En termes généraux, cependant, le terme « section critique » fait référence à la région de code protégée par un mutex.
Ein einfaches Mutex-Beispielprogramm :
Voici un programme simplifié qui démontre une implémentation de base d'un mutex :
#include <iostream> #include <thread> #include <mutex> using namespace std; mutex m; // Mutex for synchronization int i = 0; // Shared variable void makeCall() { m.lock(); // Acquire mutex lock cout << "Thread ID: " << this_thread::get_id() << endl; cout << "Value of i: " << i << endl; i++; // Increment shared variable m.unlock(); // Release mutex lock } int main() { // Create threads and assign the makeCall function to each thread t1(makeCall); thread t2(makeCall); thread t3(makeCall); // Join threads to wait for completion t1.join(); t2.join(); t3.join(); return 0; }
Dans ce programme, plusieurs threads tentent d'accéder simultanément à la variable partagée i. Le mutex garantit qu'un seul thread peut accéder à i à la fois, empêchant ainsi la corruption des données.
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!