Unterschied zwischen Mutex und Semaphor

Mutex vs Semaphore

Ein Mutex ist analog zu einem einzelnen Schlüssel für einen Raum. Eine Person, die den Schlüssel hält, der einem Thread analog ist, ist der einzige, der Zugang zu dem Raum haben kann. Die Person mit dem Zugriff muss dann den Schlüssel für die nächste Person in der Leitung aufgeben. Daher kann ein Mutex nur von dem Thread freigegeben werden, der ihn erwirbt.

Ein Mutex wird normalerweise verwendet, um den Zugriff auf einen Abschnitt eines reentranten Codes zu "serialisieren" "eine Art Code, der nicht von mehreren Threads gleichzeitig ausgeführt werden kann. In einem Abschnitt ist nur ein einzelner Thread zulässig. Dies zwingt die anderen Threads in der Warteschlange zu warten. Bevor ein Thread Zugriff erhält, muss er auf den Thread warten, bevor er den Abschnitt verlässt.

Unter Verwendung derselben Analogie in Mutex sind Semaphore die Anzahl ähnlicher Schlüssel, die auf die gleiche Anzahl von Räumen mit ähnlichen Sperren zugreifen können. Ein Semaphor oder der Wert einer Semaphorzählung hängt von der Anzahl der Personen (Threads) ab, die den Raum betreten oder verlassen. Wenn es 5 Räume gibt und diese alle besetzt sind, dann ist die Semaphorzählung gleich Null. Wenn zwei den Raum verlassen, ist der Zählwert zwei und die zwei Schlüssel werden den nächsten zwei in der Warteschlange gegeben.

Damit können Semaphore gleichzeitig von jedem 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 Semaphoranzahl effektiv zu beschränken.

Grundsätzlich kann ein Mutex als ein Semaphor mit einem Wert von Eins betrachtet werden.

Das Dekrementieren und Inkrementieren des Semaphors hängt davon ab, ob Threads Zugriff auf die gemeinsame Ressource anfordern oder den Abschnitt verlassen.

Theoretisch sind Mutex und (binäre) Semaphoren semantisch ähnlich. Die Implementierung des Mutex kann mit Semaphoren erfolgen und umgekehrt. Im praktischen Sinn können sie jedoch ein wenig anders sein.

Mutexe sollen nur zum wechselseitigen Ausschluss verwendet werden, und binäre Semaphore sollen zum gegenseitigen Ausschluss und zur Ereignisbenachrichtigung verwendet werden. Obwohl sie hinsichtlich der Implementierung und der allgemeinen Semantik sehr ähnlich sind, werden sie unterschiedlich verwendet.

Zusammenfassung:

1. Mutex wird normalerweise verwendet, um den Zugriff auf eine gemeinsame Ressource zu serialisieren, während ein Semaphor eine Anzahl gleichzeitiger Zugriffe ist.

2. Mutex ist wie ein Semaphor mit einer Zählung von eins.
3. Mutex erlaubt nur einem einzelnen Thread Zugriff, während Semaphore gleichzeitig von jedem Thread oder Prozess signalisiert werden können.

4. Semaphore sind ideal für die Synchronisation und werden häufig für die Benachrichtigung von Ereignissen und gegenseitigen Ausschluss verwendet, während Mutex nur zum gegenseitigen Ausschluss angewendet wird.