Gegenseitiger Ausschluss (Mutex)

Definition - Was bedeutet gegenseitiger Ausschluss (Mutex)?

Ein gegenseitiger Ausschluss (Mutex) ist ein Programmobjekt, das den gleichzeitigen Zugriff auf eine gemeinsam genutzte Ressource verhindert. Dieses Konzept wird bei der gleichzeitigen Programmierung mit einem kritischen Abschnitt verwendet, einem Code, in dem Prozesse oder Threads auf eine gemeinsam genutzte Ressource zugreifen. Es besitzt jeweils nur ein Thread den Mutex. Daher wird beim Starten eines Programms ein Mutex mit einem eindeutigen Namen erstellt. Wenn ein Thread eine Ressource enthält, muss er den Mutex von anderen Threads sperren, um den gleichzeitigen Zugriff auf die Ressource zu verhindern. Beim Freigeben der Ressource entsperrt der Thread den Mutex.

Technische.me erklärt gegenseitigen Ausschluss (Mutex)

Mutex kommt ins Spiel, wenn zwei Threads gleichzeitig an denselben Daten arbeiten. Es fungiert als Sperre und ist das grundlegendste Synchronisationswerkzeug. Wenn ein Thread versucht, einen Mutex abzurufen, erhält er den Mutex, falls verfügbar, andernfalls wird der Thread in den Ruhezustand versetzt. Der gegenseitige Ausschluss reduziert die Latenz und Wartezeiten durch Warteschlangen und Kontextwechsel. Mutex kann sowohl auf Hardware- als auch auf Softwareebene erzwungen werden.

Das Deaktivieren von Interrupts für die kleinste Anzahl von Anweisungen ist der beste Weg, um Mutex auf Kernelebene zu erzwingen und die Beschädigung gemeinsam genutzter Datenstrukturen zu verhindern. Wenn mehrere Prozessoren denselben Speicher gemeinsam nutzen, wird ein Flag gesetzt, um die Ressourcenerfassung je nach Verfügbarkeit zu aktivieren und zu deaktivieren. Der Busy-Wait-Mechanismus erzwingt Mutex in den Softwarebereichen. Dies ist mit Algorithmen wie dem Dekker-Algorithmus, dem Schwarz-Weiß-Backalgorithmus, dem Szymanski-Algorithmus, dem Peterson-Algorithmus und dem Lamport-Backalgorithmus ausgestattet.

Für eine effiziente Implementierung von Mutex können sich gegenseitig ausschließende Leser und Lese- / Schreib-Mutex-Klassencodes definiert werden.