Was ist Semaphor?
Semaphor ist einfach eine Variable, die nicht negativ ist und von Threads gemeinsam genutzt wird. Ein Semaphor ist ein Signalisierungsmechanismus, und ein Thread, der auf ein Semaphor wartet, kann von einem anderen Thread signalisiert werden. Es verwendet zwei atomare Operationen, 1) Warten und 2) Signal für die Prozesssynchronisation.
Ein Semaphor erlaubt oder verbietet den Zugriff auf die Ressource, was davon abhängt, wie sie eingerichtet ist.
In diesem Tutorial lernen Sie:
- Was ist Mutex?
- Verwendung von Semaphor
- Verwendung von Mutex
- Unterschied zwischen Semaphor und Mutex
- Häufige Missverständnisse über Mutex und Semaphor
- Vorteile von Semaphore
- Vorteile von Mutex
- Nachteil von Semaphoren
- Nachteile von Mutex
Was ist Mutex?
Die vollständige Form von Mutex ist das Objekt des gegenseitigen Ausschlusses. Es handelt sich um einen speziellen Typ eines binären Semaphors, mit dem der Zugriff auf die gemeinsam genutzte Ressource gesteuert wird. Es enthält einen Prioritätsvererbungsmechanismus, um Probleme mit der erweiterten Prioritätsinversion zu vermeiden. Dadurch können aktuelle Aufgaben mit höherer Priorität so schnell wie möglich blockiert werden. Die Prioritätsvererbung korrigiert jedoch nicht die Prioritätsinversion, sondern minimiert nur deren Auswirkungen.
SCHLÜSSELUNTERSCHIED
- Mutex ist ein Verriegelungsmechanismus, während Semaphore ein Signalmechanismus ist
- Mutex ist nur ein Objekt, während Semaphore eine Ganzzahl ist
- Mutex hat keinen Subtyp, während Semaphor zwei Typen hat, die Semaphor und Binärsemaphor zählen.
- Semaphore unterstützt die Änderung von Warte- und Signaloperationen, während Mutex nur von dem Prozess geändert wird, der eine Ressource anfordern oder freigeben kann.
- Der Semaphorwert wird mithilfe von wait () - und signal () -Operationen geändert. Mutex-Operationen werden dagegen gesperrt oder entsperrt.
Verwendung von Semaphor
Bei einem einzelnen Puffer können wir den 4-KB-Puffer in vier 1-KB-Puffer aufteilen. Diesen vier Puffern kann ein Semaphor zugeordnet werden. Auf diese Weise können Benutzer und Hersteller gleichzeitig an verschiedenen Puffern arbeiten.
Verwendung von Mutex
Ein Mutex bietet gegenseitigen Ausschluss. Dies kann entweder ein Produzent oder ein Konsument sein, der den Schlüssel (Mutex) haben und mit seiner Arbeit fortfahren kann. Solange der Produzent den Puffer füllt, muss der Benutzer warten und umgekehrt. In der Mutex-Sperre kann immer nur ein einziger Thread mit dem gesamten Puffer arbeiten.
Unterschied zwischen Semaphor und Mutex
Parameter | Semaphor | Mutex |
---|---|---|
Mechanismus | Es ist eine Art Signalmechanismus. | Es ist ein Verriegelungsmechanismus. |
Datentyp | Semaphor ist eine ganzzahlige Variable. | Mutex ist nur ein Objekt. |
Änderung | Die Warte- und Signaloperationen können ein Semaphor modifizieren. | Es wird nur von dem Prozess geändert, der eine Ressource anfordern oder freigeben kann. |
Ressourceneinteilung | Wenn keine Ressource frei ist, erfordert der Prozess eine Ressource, die eine Warteoperation ausführen soll. Es sollte warten, bis die Anzahl der Semaphore größer als 0 ist. | Wenn es gesperrt ist, muss der Prozess warten. Der Prozess sollte in einer Warteschlange gehalten werden. Auf diese muss nur zugegriffen werden, wenn der Mutex entsperrt ist. |
Faden | Sie können mehrere Programmthreads haben. | Sie können mehrere Programm-Threads im Mutex haben, jedoch nicht gleichzeitig. |
Eigentum | Der Wert kann durch jeden Prozess geändert werden, der die Ressource freigibt oder erhält. | Die Objektsperre wird nur von dem Prozess aufgehoben, der die Sperre dafür erhalten hat. |
Typen | Arten von Semaphoren sind das Zählen von Semaphoren und binären Semaphoren. | Mutex hat keine Untertypen. |
Operation | Der Semaphorwert wird mit den Operationen wait () und signal () geändert. | Das Mutex-Objekt ist gesperrt oder entsperrt. |
Ressourcenbelegung | Es ist belegt, wenn alle Ressourcen verwendet werden und der Prozess, der die Ressource anfordert, eine wait () -Operation ausführt und sich selbst blockiert, bis die Semaphoranzahl> 1 wird. | Falls das Objekt bereits gesperrt ist, wartet der Prozess, der Ressourcen anfordert, und wird vom System in die Warteschlange gestellt, bevor die Sperre aufgehoben wird. |
Allgemeine Fakten zu Mutex und Semaphor
Hier sind einige allgemeine Fakten zu Mutex und Semaphore:
- Nur eine Aufgabe kann den Mutex erfassen. Mit einem Mutex ist also Eigentum verbunden, und nur der Eigentümer kann den Mutex freigeben.
- Die Gründe für die Verwendung von Mutex und Semaphor sind unterschiedlich, möglicherweise aufgrund der Ähnlichkeit in ihrer Implementierung. Ein Mutex würde als binäres Semaphor bezeichnet.
- Ein bekanntes Missverständnis ist, dass Mutexe und Semaphore fast gleich sind, mit dem einzigen Unterschied, dass ein Mutex bis 1 zählen kann, während Semaphore von 0 bis N zählen können.
- Es besteht immer eine Unsicherheit zwischen binärem Semaphor und Mutex. Sie können hören, dass ein Mutex ein binäres Semaphor ist, was nicht korrekt ist.
Vorteile von Semaphore
Hier sind die Vor- und Nachteile der Verwendung von Semaphore:
- Es ermöglicht mehr als einem Thread den Zugriff auf den kritischen Abschnitt
- Semaphoren sind maschinenunabhängig.
- Semaphoren sind im maschinenunabhängigen Code des Mikrokernels implementiert.
- Sie erlauben nicht, dass mehrere Prozesse in den kritischen Bereich gelangen.
- Da im Semaphor viel gewartet wird, wird niemals Prozesszeit und Ressourcen verschwendet.
- Sie sind maschinenunabhängig und sollten im maschinenunabhängigen Code des Mikrokerns ausgeführt werden.
- Sie ermöglichen eine flexible Verwaltung von Ressourcen.
Vorteile von Mutex
Hier sind wichtige Vorteile von Mutex
- Mutexe sind nur einfache Sperren, die erhalten werden, bevor der kritische Bereich betreten und dann freigegeben wird.
- Da sich zu einem bestimmten Zeitpunkt nur ein Thread in seinem kritischen Bereich befindet, gibt es keine Race-Bedingungen und die Daten bleiben immer konsistent.
Nachteil von Semaphoren
Hier sind Nachteile / Nachteile des Semaphors
- Eine der größten Einschränkungen eines Semaphors ist die Prioritätsinversion.
- Das Betriebssystem muss alle Anrufe verfolgen, um zu warten und das Semaphor zu signalisieren.
- Ihre Verwendung wird niemals erzwungen, sondern nur durch Konvention.
- Um Deadlocks im Semaphor zu vermeiden, müssen die Operationen Wait und Signal in der richtigen Reihenfolge ausgeführt werden.
- Die Semaphorprogrammierung ist eine komplexe Methode, daher besteht die Möglichkeit, dass kein gegenseitiger Ausschluss erreicht wird.
- Es ist auch keine praktische Methode für den Einsatz in großem Maßstab, da ihre Verwendung zu einem Verlust der Modularität führt.
- Semaphor ist anfälliger für Programmiererfehler.
- Dies kann aufgrund eines Programmiererfehlers zu einem Deadlock oder einer Verletzung des gegenseitigen Ausschlusses führen.
Nachteile von Mutex
Hier sind Nachteile / Nachteile von Mutex
- Wenn ein Thread eine Sperre erhält und in den Ruhezustand wechselt oder vorbelegt ist, kann sich der andere Thread möglicherweise nicht vorwärts bewegen. Dies kann zu Hunger führen.
- Es kann nicht in einem anderen Kontext als dem, der es erworben hat, gesperrt oder entsperrt werden.
- Es sollte jeweils nur ein Thread im kritischen Bereich zulässig sein.
- Die normale Implementierung kann zu einem ausgelasteten Wartezustand führen, wodurch CPU-Zeit verschwendet wird.