Die Verwaltung der Integrität gemeinsam genutzter Informationen hängt stark von der Prozesssynchronisierung ab. Für den Umgang mit kritischen Abschnittsproblemen sind sowohl Software- als auch Hardwarelösungen verfügbar.
Andererseits sind Hardwarelösungen für das Problem des kritischen Abschnitts äußerst schwierig auszuführen. Lassen Sie uns Mutex und Semaphore untersuchen und gegenüberstellen, zwei Anwendungslösungen für den Umgang mit kritischen Abschnittsproblemen.
Key Take Away
- Mutex stellt den gegenseitigen Ausschluss sicher, sodass jeweils nur ein Thread auf eine gemeinsam genutzte Ressource zugreifen kann.
- Semaphore steuert den Zugriff auf eine Ressource durch die Verwaltung einer festen Anzahl von Genehmigungen, wodurch mehrere Threads gleichzeitig auf die Ressource zugreifen können.
- Mutexe sind einfacher zu verwenden, während Semaphore mehr Flexibilität bei der Steuerung des Zugriffs auf gemeinsam genutzte Ressourcen bieten.
Mutex vs. Semaphor
Ein Mutex (kurz für gegenseitigen Ausschluss) ist eine Art Sperre, die verwendet wird, um sicherzustellen, dass jeweils nur ein Thread oder Prozess auf eine gemeinsam genutzte Ressource zugreifen kann. Semaphore ist ein Mechanismus, der den Zugriff auf gemeinsam genutzte Ressourcen über einen Zähler verwaltet, der den Zugriff steuert, wobei unterschiedliche Werte unterschiedliche Zustände der Ressource darstellen.

Mutex steht für Mutual Exclusion Object. Es ist eine Art binäre Semaphore, die verwendet wird, um den Zugriff auf eine gemeinsam genutzte Ressource einzuschränken. Um Bedenken hinsichtlich längerer Prioritätsumkehrungen zu vermeiden, verfügt es über einen Prioritätsvererbungsmechanismus.
Es ermöglicht, bestehende Jobs mit höherer Priorität für die kürzestmögliche Zeit zu sperren. Die Prioritätsvererbung hingegen legt die Prioritätsumkehr nicht fest; vielmehr verringert es seine Wirkung.
Semaphor ist eine nicht negative Variable, die zwischen Threads verwaltet wird. Ein Semaphor ist ein Signalmechanismus, und ein anderer Thread kann einem Thread signalisieren, der auf ein Semaphor wartet.
Zur Prozesssynchronisation werden zwei atomare Prozeduren eingesetzt: ()wait und ()signal. Je nach Konfiguration ermöglicht oder verhindert ein Semaphor den Zugriff auf die Ressource.
Vergleichstabelle
Vergleichsparameter | Mutex | Semaphor |
---|---|---|
Mechanismus | Es ist ein Schließsystem. | Es ist eine Art Signalsystem. |
Sinn | Thread wird durch den Mutex repräsentiert. | Prozesse werden durch Semaphore dargestellt. |
Natur | Mutex ist atomar und singulär. | Semaphore ist atomarer Natur, aber nicht singulär. |
Datentyp | Mutex ist nichts weiter als ein Stück Software. | Ein Semaphor ist eine Variable mit einem ganzzahligen Wert. |
Typen | Mutex hat keine Untertypen. | Zählende und binäre Semaphore sind zwei Arten von Semaphoren. |
Änderung | Nur der Prozess, der eine Ressource anfordern oder freigeben kann, kann sie ändern. | Eine Semaphore kann mit den Wait- und Signal-Funktionen modifiziert werden. |
Was ist Mutex?
Gegenseitiger Ausschluss ist ein Begriff, der zur Beschreibung einer Situation verwendet wird. Mutex ist ein Kurzname für das Objekt. Aus dem Wort gegenseitiger Ausschluss können wir ableiten, dass jeweils nur ein Programm Zugriff auf eine bestimmte Ressource hat.
Das Mutex-Objekt ermöglicht vielen Anwendungs-Threads den gleichzeitigen Zugriff auf dieselbe Ressource, jedoch nur jeweils einer.
Immer wenn ein Programm das System nach einer Ressource fragt, erstellt das System ein Mutex-Objekt mit einer eindeutigen Identität oder ID. Infolgedessen nimmt das Programm jedes Mal, wenn es diese Ressource verwenden möchte, eine Sperre für das Objekt vor.
Das Programm verwendet dann die Ressource, bevor es das Mutex-Objekt endgültig freigibt. Das Mutex-Objekt kann dann auf die gleiche Weise erstellt und von anderen Programmen verwendet werden.
Durch das Sperren des Objekts wird diese bestimmte Ressource diesem bestimmten Prozess zugewiesen, und kein anderer Prozess kann sie verwenden. Dadurch dürfen keine anderen Programme die Systemressourcen im entscheidenden Bereich nutzen. Ein Mutex-Objekt kann verwendet werden, um auf diese Weise eine Prozesssynchronisation zu erreichen.
Ein Mutex ermöglicht gegenseitigen Ausschluss, entweder als Produzent oder als Konsument kann er den Schlüssel (Mutex) haben und weiterarbeiten. Der Konsument muss warten, bis der Puffer des Produzenten gefüllt ist und umgekehrt.
Was ist Semaphor?
Semaphore ist eine Integervariable S, die zur Prozesssynchronisierung verwendet wird und mit der Anzahl der Ressourcen im System initialisiert wird. Um den Wert von S zu ändern, verwendet es zwei Hauptfunktionen: wait() und signal().
Diese beiden Funktionen werden verwendet, um den Wert eines Semaphors zu ändern, aber sie ermöglichen dies jeweils nur einem Programm, daher können zwei Methoden den Wert eines Semaphors nicht gleichzeitig ändern. Zählsemaphore und binäre Semaphore sind die zwei Arten von Semaphoren.
Die Semaphor-Variable wird zuerst mit der Anzahl verfügbarer Ressourcen initialisiert, während Semaphore gezählt werden. Die Methode wait() wird dann immer dann ausgeführt, wenn ein Prozess eine Ressource benötigt, und der Wert der Semaphor-Variablen wird um eins reduziert.
Der Prozess nutzt dann die Ressource und ruft anschließend die signal()-Methode auf, die den Wert der Semaphorvariablen um eins erhöht. Immer wenn der Wert der Semaphorvariablen 0 erreicht, d. h. wenn das Programm alle Ressourcen aufgebraucht hat und keine mehr zur Verwendung übrig sind,
Wenn dann ein anderer Prozess Ressourcen verwenden muss, muss er auf seine Zeit warten. Auf diese Weise stellen wir eine Prozesssynchronisation her.
Bei binären Semaphoren ist der Wert der Semaphor-Variablen entweder 0 oder 1. Wenn ein Prozess eine Ressource nutzen möchte, wird die Methode wait() aufgerufen und der Wert des Semaphors von 0 auf 1 gesetzt.
Der Prozess verwendet dann die Ressource, und nachdem er fertig ist, wird die signal()-Methode aufgerufen und der Wert der Semaphor-Variablen auf 1 gesetzt.
Wenn der Wert der Semaphor-Variablen zu einem bestimmten Zeitpunkt 0 ist und ein anderes Programm auf dieselbe Ressource zugreifen möchte, muss es warten, bis das vorherige Programm die Ressourcen freigibt. Auf diese Weise kann eine Prozesssynchronisation durchgeführt werden. Es ist vergleichbar mit einem Mutex, aber es sperrt nichts.

Hauptunterschiede zwischen Mutex und Semaphor
- Mutex verwendet einen Sperrmechanismus. Das heißt, wenn ein Prozess eine Ressource verwenden muss, muss er diese zuerst sperren, verwenden und dann freigeben. Semaphore hingegen verwendet eine Signalisierungstechnik, bei der die Funktionen wait() und signal() verwendet werden, um anzuzeigen, ob ein Prozess eine Ressource gibt oder verbraucht.
- Ein Mutex ist ein Objekt, während ein Semaphor eine Variable mit einem ganzzahligen Wert ist.
- Ein Mutex-Objekt erfordert, dass verschiedene Prozessthreads gleichzeitig dieselbe gemeinsam nutzbare Ressource verbinden. Semaphore hingegen ermöglicht mehreren Prozessthreads den Zugriff auf die endliche Instanz der Ressource, bis sie zugänglich wird.
- In Mutex kann die Sperre gleichzeitig durch denselben Prozess erhalten und entladen werden. Die Bewertung der Semaphor-Variablen kann jedoch von jedem Prozess geändert werden, der eine Ressource benötigt, aber nur ein Prozess kann den Wert gleichzeitig ändern.
- Mutex ermöglicht es verschiedenen Programm-Threads, auf dieselbe gemeinsam genutzte Ressource zuzugreifen, jedoch nur jeweils auf eine, während Semaphore andererseits verschiedene Programm-Threads benötigt, um eine begrenzte Anzahl von Ressourcen gleichzeitig zu verbinden.