Unterschied zwischen Mutex und Semaphor
- 926
- 271
- Hr. Jeremie Orth
Mutex vs Semaphor
Ein Mutex ist analog zu einem einzigen Schlüssel zu einem Raum. Eine Person, die den Schlüssel hält, der analog zu einem Faden ist, ist der einzige, der Zugang zum Raum haben kann. Die Person mit dem Zugang muss dann den Schlüssel zur nächsten Person in der Schlange geben. Daher kann ein Mutex nur durch den Thread freigesetzt werden, der ihn erwirbt.
Ein Mutex wird normalerweise verwendet, um den Zugriff auf einen Abschnitt eines Wiedereintrittscodes zu serialisieren, eine Art Code, der nicht von mehreren Threads gleichzeitig ausgeführt werden kann. In einem Abschnitt ist nur ein einzelner Thread erlaubt. Dies zwingt die anderen Fäden in der Warteschlange, zu warten. Bevor ein Thread den Zugriff erhält, muss er bis zum Thread warten, bevor er den Abschnitt aufgibt.
Mit der gleichen Analogie in Mutex sind Semaphoren die Anzahl ähnlicher Schlüssel, die auf die gleiche Anzahl von Räumen mit ähnlichen Schlössern zugreifen können. Ein Semaphor oder der Wert einer Semaphorzahl hängt von der Anzahl der Personen (Threads) ab, die aus dem Raum eingeben oder ausgehen. Wenn es 5 Räume gibt und sie alle besetzt sind, dann ist die Anzahl der Semaphoren Null. Wenn zwei den Raum verlassen, beträgt die Anzahl zwei und die beiden Schlüssel werden den nächsten zwei in der Warteschlange gegeben.
Trotzdem können Semaphoren gleichzeitig durch jeden Thread oder Prozess signalisiert werden und sind ideal für Anwendungen, die eine Synchronisation erfordern. Dennoch werden Semaphoren verwendet, um die Anzahl der gleichzeitigen Benutzer einer gemeinsamen Ressource basierend auf der maximalen Anzahl von Semaphoren effektiv einzuschränken.
Grundsätzlich kann ein Mutex als Semaphor mit einem Wert von einem betrachtet werden.
Die Abnahme und Erhöhung des Semaphors hängt davon ab, ob Threads Zugriff auf die gemeinsame Ressource fordern oder den Abschnitt verlassen.
Theoretisch sind mutex und (binäre) semaphoren semantisch ähnlich.Die Implementierung des Mutex kann mit Semaphoren durchgeführt werden. Im praktischen Sinne können sie jedoch etwas anders sein.
Mutexes sollen nur für den gegenseitigen Ausschluss angewendet werden, und binäre Semaphoren sollen zur gegenseitigen Ausschluss- und Ereignisbenachrichtigung verwendet werden. Obwohl sie in Bezug auf die Umsetzung und die allgemeine Semantik sehr ähnlich sind, werden sie unterschiedlich verwendet.
Zusammenfassung:
1. Mutex wird typischerweise verwendet, um den Zugriff auf eine gemeinsame Ressource zu serialisieren, während ein Semaphor eine Reihe von gleichzeitigen Zugriffen ist.
2. Mutex ist wie ein Semaphor mit einer Anzahl von einem.
3. MUTEX ermöglicht es einem einzelnen Thread nur, Zugriff zu haben, während Semaphoren gleichzeitig durch jeden Thread oder Prozess signalisiert werden können.
4. Semaphoren sind ideal für die Synchronisation und werden häufig für die Ereignisbenachrichtigung und den gegenseitigen Ausschluss verwendet, während Mutex nur für den gegenseitigen Ausschluss angewendet wird.