Empfohlen, 2019

Tipp Der Redaktion

Unterschied zwischen Semaphor und Mutex

Die Prozesssynchronisation spielt eine wichtige Rolle bei der Aufrechterhaltung der Konsistenz gemeinsam genutzter Daten. Sowohl die Software- als auch die Hardwarelösungen sind für die Behandlung kritischer Abschnitte verfügbar. Hardwarelösungen für kritische Abschnitte sind jedoch schwer zu implementieren. Im heutigen Artikel werden wir zwei softwarebasierte Lösungen zur Behandlung kritischer Abschnittsprobleme diskutieren, nämlich Semaphore und Mutex.

Der grundlegende Unterschied zwischen Semaphor und Mutex besteht darin, dass Semaphor ein Signalisierungsmechanismus ist, dh Prozesse führen eine wait () - und eine Signal () - Operation aus, um anzuzeigen, ob sie die Ressource erfassen oder freigeben. Während der Mutex-Sperrmechanismus den Prozess aktiviert, muss der Prozess die Sperre des Protokolls übernehmen Mutex-Objekt, wenn die Ressource erworben werden soll. Es gibt noch einige Unterschiede zwischen Semaphor und Mutex. Lassen Sie uns diese mit Hilfe der unten gezeigten Vergleichstabelle diskutieren.

Vergleichstabelle

VergleichsgrundlageSemaphorMutex
BasicSemaphore ist ein Signalisierungsmechanismus.Mutex ist ein Sperrmechanismus.
ExistenzSemaphore ist eine Ganzzahlvariable.Mutex ist ein Objekt.
FunktionSemaphore ermöglichen mehreren Programmthreads den Zugriff auf eine begrenzte Instanz von Ressourcen.Mutex erlaubt mehreren Programm-Threads den Zugriff auf eine einzelne Ressource, jedoch nicht gleichzeitig.
EigentumDer Semaphorwert kann durch jeden Prozess geändert werden, der die Ressource erfasst oder freigibt.Die Mutex-Objektsperre wird nur von dem Prozess freigegeben, der die Sperre für sie erlangt hat.
KategorisierenSemaphore können in Zähl-Semaphore und Binär-Semaphore kategorisiert werden.Mutex wird nicht weiter kategorisiert.
OperationDer Semaphorwert wird mit der Operation wait () und signal () geändert.Das Mutex-Objekt wird durch den Prozess, der die Ressource anfordert oder freigibt, gesperrt oder freigegeben.
Ressourcen belegtWenn alle Ressourcen verwendet werden, führt der Prozess, der die Ressource anfordert, die wait () - Operation aus und blockiert sich selbst, bis die Anzahl der Semaphore größer als eins wird.Wenn ein Mutex-Objekt bereits gesperrt ist, wartet der Prozess, der Ressourcen anfordert, und wartet in der Warteschlange, bis die Sperre aufgehoben wird.

Definition von Semaphor

Semaphore ist ein Werkzeug zur Prozesssynchronisierung. Semaphore ist typischerweise eine ganzzahlige Variable S, die auf die Anzahl der im System vorhandenen Ressourcen initialisiert wird, und der Wert von Semaphor kann außer durch die Initialisierung nur durch zwei Funktionen wait () und signal () modifiziert werden .

Die Operation wait () und signal () modifizieren den Wert des Semaphors untrennbar . Dies bedeutet, dass wenn ein Prozess den Wert des Semaphors ändert, kein anderer Prozess gleichzeitig den Wert des Semaphors ändern kann. Semaphore werden vom Betriebssystem in zwei Kategorien Counting Semaphore und Binary Semaphore unterschieden .

In Counting Semaphore wird der Semaphor S-Wert auf die Anzahl der im System vorhandenen Ressourcen initialisiert. Immer wenn ein Prozess auf die Ressource zugreifen möchte, führt er wait () auf dem Semaphor aus und verringert den Wert des Semaphors um eins. Wenn die Ressource freigegeben wird, führt sie eine signal () - Operation für das Semaphor aus und inkrementiert den Wert des Semaphors um eins. Wenn die Semaphor-Zählung auf 0 geht, bedeutet dies, dass alle Ressourcen von den Prozessen belegt werden. Wenn ein Prozess eine Ressource verwenden muss, wenn der Semaphor-Zähler 0 ist, führt er wait () aus und wird blockiert, bis der Wert des Semaphors größer als 0 wird.

Im binären Semaphor liegt der Wert des Semaphors zwischen 0 und 1 . Es ist ähnlich dem Mutex-Lock, aber Mutex ist ein Sperrmechanismus, während der Semaphor ein Signalmechanismus ist. Wenn ein Prozess im binären Semaphor auf die Ressource zugreifen möchte, führt er eine wait () - Operation für das Semaphor aus und verringert den Semaphorwert von 1 auf 0. Wenn er die Ressource freigibt, führt er eine signal () - Operation für das Semaphor aus und erhöht die Werte Sein Wert ist 1. Wenn der Wert von Semaphor 0 ist und ein Prozess auf die Ressource zugreifen möchte, führt er die wait () - Operation aus und blockiert sich selbst, bis der aktuelle Prozess, der die Ressourcen verwendet, die Ressource freigibt.

Definition von Mutex

Objekt für gegenseitigen Ausschluss wird kurz als Mutex bezeichnet. Aus dem Begriff des gegenseitigen Ausschlusses können wir verstehen, dass jeweils nur ein Prozess auf die jeweilige Ressource zugreifen kann. Das Mutex-Objekt ermöglicht es den mehreren Programm-Threads, dieselbe Ressource zu verwenden, jedoch nicht gleichzeitig.

Wenn ein Programm gestartet wird, fordert es das System auf, ein Mutex-Objekt für eine bestimmte Ressource zu erstellen. Das System erstellt das Mutex-Objekt mit einem eindeutigen Namen oder einer eindeutigen ID. Immer wenn der Programm-Thread die Ressource verwenden möchte, die er für das Mutex-Objekt sperrt, die Ressource verwendet, und nach der Verwendung löst er die Sperre für das Mutex-Objekt auf. Dann darf der nächste Prozess die Sperre für das Mutex-Objekt übernehmen.

Inzwischen hat ein Prozess die Sperre für das Mutex-Objekt erworben, auf die kein anderer Thread / Prozess auf diese Ressource zugreifen kann. Wenn das Mutexobjekt bereits gesperrt ist, muss der Prozess, der die Sperre für das Mutexobjekt erwerben möchte, warten und wird vom System in die Warteschlange gestellt, bis das Mutexobjekt entsperrt ist.

Hauptunterschiede zwischen Semaphor und Mutex

  1. Semaphore ist ein Signalisierungsmechanismus, da eine wait () - und eine Signal () - Operation, die für eine Semaphorvariable ausgeführt wird, angibt, ob ein Prozess die Ressource erfasst oder die Ressource freigibt. Auf der anderen Seite ist der Mutex ein Sperrmechanismus. Um eine Ressource zu erhalten, muss ein Prozess das Mutex-Objekt sperren. Beim Freigeben eines Ressourcenprozesses muss das Mutex-Objekt freigegeben werden.
  2. Semaphore ist normalerweise eine Ganzzahlvariable, während Mutex ein Objekt ist .
  3. Semaphore ermöglicht mehreren Programmthreads den Zugriff auf die begrenzte Instanz von Ressourcen . Auf der anderen Seite erlaubt Mutex mehreren Programmthreads den Zugriff auf eine einzelne gemeinsam genutzte Ressource, jedoch jeweils eine.
  4. Der Wert der Semaphorvariablen kann von jedem Prozess geändert werden, der Ressourcen durch Abwarten der Operation wait () und signal () erhält oder freigibt. Auf der anderen Seite kann die für das Mutex-Objekt erworbene Sperre nur von dem Prozess freigegeben werden, der die Sperre für das Mutex-Objekt erhalten hat.
  5. Semaphore sind zwei Arten, die Semaphore zählen, und binäre Semaphore, die dem Mutex ziemlich ähnlich sind.
  6. Der Wert der Semaphorvariable wird durch die Operation wait () und signal () abgesehen von der Initialisierung geändert. Das stummgeschaltete Objekt wird jedoch durch den Prozess, der die Ressource abruft oder freigibt, gesperrt oder freigegeben.
  7. Wenn alle Ressourcen vom Prozess abgerufen werden und keine Ressource frei ist, führt der Prozess, der die Ressource erwerben möchte, die wait () - Operation für die Semaphorvariable durch und blockiert sich selbst, bis die Anzahl der Semaphore größer als 0 wird. Wenn jedoch ein Mutexobjekt bereits vorhanden ist Anschließend wird der Prozess, der die Ressource erwerben möchte, gesperrt und vom System in die Warteschlange gestellt, bis die Ressource freigegeben wird und das Mutex-Objekt entsperrt wird.

Fazit:

Semaphore ist eine bessere Option, wenn mehrere Ressourcen verfügbar sind. Bei einer einzelnen gemeinsam genutzten Ressource ist Mutex die bessere Wahl.

Top