Maison  >  Article  >  développement back-end  >  Comment fonctionnent les mutex : une explication simplifiée de l’exclusion mutuelle ?

Comment fonctionnent les mutex : une explication simplifiée de l’exclusion mutuelle ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 10:53:02627parcourir

How Do Mutexes Work: A Simplified Explanation of Mutual Exclusion?

Implémentation des mutex : une explication simplifiée

Comprendre les mutex peut être difficile, en particulier pour les débutants. Cet article vise à fournir une explication simplifiée du fonctionnement des mutex, en abordant les idées fausses courantes et en proposant un exemple de programme rudimentaire.

Qu'est-ce qu'un Mutex ?

Un mutex, court pour « exclusion mutuelle », est une construction de programmation conçue pour empêcher plusieurs threads d'accéder simultanément aux ressources partagées, garantissant ainsi l'intégrité des données et empêchant les conditions de concurrence. Lorsqu'un thread acquiert un verrou sur un mutex, il obtient effectivement un accès exclusif à la ressource protégée.

La syntaxe Mutex

La syntaxe pthread_mutex_lock( &mutex1 ); peut sembler contre-intuitif, car il semble verrouiller l'objet mutex lui-même plutôt que la ressource réelle à protéger. Cependant, cette syntaxe permet au mutex de servir de gardien, contrôlant l'accès à une région spécifique du code ou des données partagées.

Mécanisme de verrouillage

Les threads n'ont pas d'accès direct connaissance du moment où une région de code est verrouillée. Au lieu de cela, ils s'appuient sur le cloisonnement de la mémoire, une technique qui garantit que les opérations d'écriture sont effectuées avant les opérations de lecture, empêchant ainsi les conditions de concurrence critique dans lesquelles un thread modifie les données tandis qu'un autre tente d'y accéder.

Section critique

Une section critique est un terme souvent utilisé de manière interchangeable avec les mutex. Cependant, les sections critiques font spécifiquement référence à la région de code protégée par un mutex, et non au mutex lui-même. Il est important de noter que les sections critiques sont spécifiques à la plate-forme et peuvent avoir des comportements ou des limitations différents.

Exemple de programme

Considérez l'exemple de code C suivant :

#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;
}

Dans cet exemple, plusieurs threads tentent d'exécuter la fonction makeACallFromPhoneBooth, qui utilise un mutex pour garantir qu'un seul thread à la fois peut incrémenter la variable partagée i. Cela évite les conditions de concurrence et garantit la cohérence du résultat.

En résumé, les mutex fournissent un mécanisme permettant de contrôler l'accès aux ressources partagées, garantissant l'intégrité des données et empêchant les conditions de concurrence. La syntaxe pthread_mutex_lock( &mutex1 ); verrouille un objet mutex, protégeant efficacement une région spécifique de code ou de données partagé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