Heim >Backend-Entwicklung >C++ >Wie funktioniert ein Mutex wie ein Türgriff einer Telefonzelle?
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!