Heim > Artikel > Backend-Entwicklung > Wie verhindern Mutexe Race Conditions in der Multithread-Programmierung?
Mutex-Konzepte: Ein vereinfachtes Tutorial
Mutexe, kurz für gegenseitige Ausschlusssperren, verhindern, dass mehrere Threads gleichzeitig auf gemeinsame Ressourcen zugreifen. Um zu verstehen, wie sie funktionieren, betrachten Sie eine Analogie:
Das Beispiel einer Telefonzelle
Stellen Sie sich eine einzelne Telefonzelle mit einem Türgriff vor. Die Leute (Threads) stehen Schlange, um das Telefon zu benutzen, aber nur die Person, die die Türklinke ergreift, kann es benutzen. In dem Moment, in dem sie loslassen, kann eine andere Person an die Reihe kommen.
In dieser Analogie:
Mutex-Logik
Ein Thread erhält durch Aufruf eine Sperre für einen Mutex pthread_mutex_lock(&mutex). Dies markiert einen Codebereich als exklusiv für diesen Thread.
Sobald der Thread mit der Ausführung dieses Codes fertig ist, gibt er die Sperre durch Aufruf von pthread_mutex_unlock(&mutex) frei. Dies signalisiert anderen Threads, dass sie nun die Sperre erwerben und den geschützten Code ausführen können.
Einfaches Mutex-Beispiel
Der folgende C 11-Code veranschaulicht das Mutex-Konzept:
#include <iostream> #include <thread> #include <mutex> std::mutex m; int i = 0; void makeACallFromPhoneBooth() { m.lock(); // Thread acquires lock on mutex (grabs door handle) std::cout << i << " Hello Wife" << std::endl; // Protected code i++; // No other thread can modify i while lock is held m.unlock(); // Thread releases lock (lets go of door handle) } int main() { std::thread man1(makeACallFromPhoneBooth); std::thread man2(makeACallFromPhoneBooth); std::thread man3(makeACallFromPhoneBooth); man1.join(); man2.join(); man3.join(); return 0; }
In diesem Beispiel versuchen drei Threads (Personen), eine gemeinsam genutzte Ressource (das Telefon) zu nutzen. Der Mutex stellt sicher, dass jeweils nur ein Thread auf die Ressource zugreifen kann.
Das obige ist der detaillierte Inhalt vonWie verhindern Mutexe Race Conditions in der Multithread-Programmierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!