Contents
Was ist Semaphor?
Semaphore ist ein variabler oder abstrakter Datentyp, der verwendet wird, um den Zugriff auf eine gemeinsame Ressource durch mehrere Prozesse in einem gleichzeitigen System wie einem Multitasking-Betriebssystem zu steuern. Das Semaphore-Konzept wurde 1962 vom niederländischen Informatiker Edsger Dijkstra erfunden . Semaphore ist typischerweise eine Variable, die verwendet wird, um kritische Abschnittsprobleme zu lösen und eine Prozesssynchronisation in einer Multi-Processing-Umgebung zu erreichen.
Bei der gleichzeitigen Programmierung ist Semaphor typischerweise eine ganzzahlige Variable, die auf die Anzahl der im System vorhandenen Ressourcen initialisiert wird. Der Wert von Semaphore kann nur durch zwei Funktionen geändert werden: wait () und signal () abgesehen von der Initialisierung.
Semaphoren, die auf die Werte 0 und 1 (lock/unlock, available/unavailable) beschränkt sind, werden als binäre Semaphoren bezeichnet und dienen zur Realisierung von Sperren. Auf der anderen Seite werden Semaphoren, die eine beliebige Ressourcenzählung ermöglichen, als Zählsemaphore bezeichnet.
Was sind einige der Nachteile von Semaphore?
- Die Semaphore-Programmierung ist eine komplexe Methode und daher sind die Chancen hoch, einen gegenseitigen Ausschluss nicht zu erreichen.
- Semaphore ist anfälliger für Fehler
- Das Betriebssystem muss alle Aufrufe nachverfolgen, um zu warten und Semaphore zu signalisieren.
- Die Wahrscheinlichkeit eines Deadlocks ist bei Semaphoren hoch, falls die Warte- und Signaloperationen in der richtigen Reihenfolge ausgeführt werden müssen.
Was sind die Vorteile von Semaphore?
- Lässt nicht zu, dass mehrere Prozesse in den kritischen Abschnitt eintreten.
- Es ermöglicht mehr als einem Thread, auf den kritischen Abschnitt zuzugreifen.
- Sie ermöglichen ein effizientes Ressourcenmanagement.
- Es gibt keine Verschwendung von Prozesszeit und Ressourcen in Semaphore durch geschäftiges Warten.
Was Sie über Semaphore wissen müssen
- Semaphore ist ein Signalisierungsmechanismus und ein Thread, der auf einen Semaphor wartet, kann von einem anderen Thread signalisiert werden.
- Semaphore ist für Prozesse.
- Semaphore ist atomar, aber nicht singulär.
- Ein binäres Semaphor kann als Mutex verwendet werden, zusammen mit der Bereitstellung einer Signalisierung zwischen Threads.
- Der Semaphorwert kann von jedem Prozess geändert werden, der die Ressource erwirbt oder freigibt.
- Semaphore ist eine Integer-Variable.
- Wenn gesperrt, kann ein Semaphor von verschiedenen Threads bearbeitet werden.
- Ein Semaphor verwendet zwei atomare Operationen, Wait und Signal für die Prozesssynchronisation.
- Es kann jeweils nur ein Prozess binäre Semaphoren erfassen, aber mehrere Prozesse können gleichzeitig Semaphoren erfassen, wenn Semaphoren gezählt werden.
- Semaphore funktioniert im Kernel-Space.
- Das Konzept des Eigentums fehlt in Semaphoren.
- Semaphore können in Zählsemaphore und binäre Semaphore kategorisiert werden.
- Wenn alle Ressourcen verwendet werden, führt der Prozess, der Ressourcen anfordert, eine Wait()-Operation aus und blockiert sich selbst, bis die Semaphorenzahl größer als eins wird.
Was ist Mutex?
Bei der gleichzeitigen Programmierung ist Mutex ein Objekt in einem Programm, das als Sperre dient, die verwendet wird, um den gegenseitigen Ausschluss zwischen Threads auszuhandeln. Mutex ist ein Sonderfall des Semaphors; es ist ein gegenseitiges Ausschlussobjekt, das den Zugriff auf eine Ressource synchronisiert. Ein Mutex-Objekt lässt nur einen Thread in einen kontrollierten Abschnitt zu und zwingt andere Threads, die versuchen, auf diesen Abschnitt zuzugreifen, zu warten, bis der erste Thread diesen Abschnitt verlassen hat.
Beim Starten eines Programms wird ein Mutex mit einem eindeutigen Namen erstellt. Nach dieser Phase muss jeder Thread, der die Ressource benötigt, den Mutex für andere Threads sperren, während er die Ressource verwendet. Der Mutex wird so eingestellt, dass er entsperrt wird, wenn die Daten nicht mehr benötigt werden oder die Routine beendet ist.
Was sind einige der Nachteile von Mutex?
- Es ist schwierig, Mutex aus einem anderen Kontext zu sperren oder zu entsperren als dem, der ihn erworben hat.
- Es soll immer nur ein Thread im kritischen Abschnitt erlaubt sein.
- Im Falle des Besetzt-Wartezustands wird die CPU-Zeit verschwendet.
- Wenn ein Thread eine Sperre erhält und ihm dabei zuvorgekommen ist, kann der andere Thread möglicherweise nicht verschoben werden.
Was sind einige der Vorteile von Mutex?
- Es gibt keine Race-Conditions und die Daten bleiben immer konsistent, da sich in Mutex immer nur ein Thread im kritischen Abschnitt befindet.
- Der Thread mit Mutex besitzt das Eigentum an der Ressource.
- Mutex ist typischerweise atomar und von Natur aus singulär.
Was Sie über Semaphore wissen müssen
- Der Mutex ist ein Sperrmechanismus, der sicherstellt, dass jeweils nur ein Thread den Mutex erwerben und in den kritischen Abschnitt eintreten kann.
- Mutex ist für Threads.
- Mutex ist typischerweise atomar und von Natur aus singulär.
- Ein Mutex kann niemals als Semaphor verwendet werden.
- Die Mutex-Objektsperre wird nur von dem Prozess aufgehoben, der die Sperre dafür erworben hat.
- Mutex ist ein Objekt.
- Mutex, falls gesperrt, muss vom selben Thread entsperrt werden.
- Das Mutex-Objekt wird durch den Prozess, der die Ressource anfordert oder freigibt, gesperrt oder entsperrt.
- Es kann jeweils nur ein Thread einen Mutex abrufen.
- Mutex funktioniert im Userspace.
- Der Thread mit Mutex besitzt das Eigentum an der Ressource.
- Mutex hat keine weitere Kategorisierung.
- Wenn ein Mutex-Objekt bereits gesperrt ist, wartet der Prozess, der Ressourcen anfordert, und wird vom System in die Warteschlange gestellt, bis die Sperre aufgehoben wird.
Lesen Sie auch : Unterschied zwischen Prozess und Thread in Os
Unterschied zwischen Semaphor und Mutex in Tabellenform
VERGLEICHSGRUNDLAGE | SEMAPHOR | MUTEX |
Beschreibung | Semaphore ist ein Signalisierungsmechanismus und ein Thread, der auf einen Semaphor wartet, kann von einem anderen Thread signalisiert werden. | Der Mutex ist ein Sperrmechanismus, der sicherstellt, dass jeweils nur ein Thread den Mutex erwerben und in den kritischen Abschnitt eintreten kann. |
Zweck | Semaphore ist für Prozesse. | Mutex ist für Threads. |
Natur | Semaphore ist atomar, aber nicht singulär. | Mutex ist typischerweise atomar und von Natur aus singulär. |
Verwenden | Ein binäres Semaphor kann als Mutex verwendet werden, zusammen mit der Bereitstellung einer Signalisierung zwischen Threads. | Ein Mutex kann niemals als Semaphor verwendet werden. |
Freigabe des Mechanismus | Der Semaphorwert kann von jedem Prozess geändert werden, der die Ressource erwirbt oder freigibt. | Die Mutex-Objektsperre wird nur von dem Prozess aufgehoben, der die Sperre dafür erworben hat. |
Was sie sind | Semaphore ist eine Integer-Variable. | Mutex ist ein Objekt. |
Entsperren | Wenn gesperrt, kann ein Semaphor von verschiedenen Threads bearbeitet werden. | Mutex, falls gesperrt, muss vom selben Thread entsperrt werden. |
Gewinde & Prozess | Es kann jeweils nur ein Prozess binäre Semaphoren erfassen, aber mehrere Prozesse können gleichzeitig Semaphoren erfassen, wenn Semaphoren gezählt werden. | Es kann jeweils nur ein Thread einen Mutex abrufen. |
Arbeiten | Semaphore funktioniert im Kernel-Space. | Mutex funktioniert im Userspace. |
Eigentumskonzept | Das Konzept des Eigentums fehlt in Semaphoren. | Der Thread mit Mutex besitzt das Eigentum an der Ressource. |
Kategorisierung | Semaphore können in Zählsemaphore und binäre Semaphore kategorisiert werden. | Mutex hat keine weitere Kategorisierung. |
Das Anfordern von Ressourcen | Wenn alle Ressourcen verwendet werden, führt der Prozess, der Ressourcen anfordert, eine Wait()-Operation aus und blockiert sich selbst, bis die Semaphorenzahl größer als eins wird. | Wenn ein Mutex-Objekt bereits gesperrt ist, wartet der Prozess, der Ressourcen anfordert, und wird vom System in die Warteschlange gestellt, bis die Sperre aufgehoben wird. |