Heim >Backend-Entwicklung >C++ >Wie funktioniert ein Mutex wie ein Türgriff einer Telefonzelle?

Wie funktioniert ein Mutex wie ein Türgriff einer Telefonzelle?

DDD
DDDOriginal
2024-11-12 04:16:01200Durchsuche

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

Mutex-Konzepte anhand einer realen Analogie verstehen

Um die Funktionalität von Mutexes zu verstehen, stellen wir uns ein Szenario vor, an dem mehrere Personen und ein Telefon beteiligt sind Verkaufsstand. Jedes Individuum stellt einen Thread dar und die Telefonzelle symbolisiert eine Ressource, auf die jeweils nur eine Person zugreifen kann.

Die Rolle von Mutex als „Türgriff“:

Der Mutex fungiert als Türgriff der Telefonzelle und kontrolliert den Zugriff auf die Ressource. Wenn eine Person den Griff ergreift, verriegelt sie effektiv die Tür und verhindert, dass andere eintreten. Ebenso erhält ein Thread, der eine Sperre für einen Mutex erhält, exklusiven Zugriff auf die durch den Mutex geschützte Ressource.

So bestimmen Threads den Sperrstatus:

Threads basieren auf a Mechanismus namens „Memory Fencing“, um festzustellen, ob ein Mutex gesperrt ist. Memory Fencing stellt sicher, dass der Sperrstatus über alle Threads hinweg synchronisiert wird und verhindert so, dass mehrere Threads gleichzeitig auf die geschützte Ressource zugreifen.

Unterscheidung zwischen Mutex und kritischem Abschnitt:

In Windows Nur kritische Abschnittsobjekte bieten eine Alternative zu Mutexen. Kritische Abschnittsobjekte sind schneller und nur für ihren implementierenden Thread sichtbar. Im Allgemeinen bezieht sich der Begriff „kritischer Abschnitt“ jedoch auf den durch einen Mutex geschützten Codebereich.

Ein einfaches Mutex-Beispielprogramm:

Hier ist ein vereinfachtes Programm Das demonstriert eine grundlegende Mutex-Implementierung:

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

In diesem Programm versuchen mehrere Threads gleichzeitig auf die gemeinsam genutzte Variable i zuzugreifen. Der Mutex stellt sicher, dass jeweils nur ein Thread auf i zugreifen kann, wodurch eine Datenbeschädigung verhindert wird.

Das obige ist der detaillierte Inhalt vonWie funktioniert ein Mutex wie ein Türgriff einer Telefonzelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn