Maison  >  Article  >  développement back-end  >  Comment fonctionne un mutex comme une poignée de porte de cabine téléphonique ?

Comment fonctionne un mutex comme une poignée de porte de cabine téléphonique ?

DDD
DDDoriginal
2024-11-12 04:16:01135parcourir

How does a mutex work like a phone booth door handle?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn