Maison >développement back-end >C++ >Qu'est-ce qu'un Mutex et comment fonctionne-t-il dans les environnements multithread ?

Qu'est-ce qu'un Mutex et comment fonctionne-t-il dans les environnements multithread ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 18:43:14109parcourir

What is a Mutex and How Does it Work in Multithreaded Environments?

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!

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