Contents
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.
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.
Lesen Sie auch : Unterschied zwischen Prozess und Thread in Os
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. |
Haben Sie sich jemals gefragt, warum Sie manchmal bei Einkäufen Ihre PIN eingeben müssen und…
Haben Sie sich jemals gefragt, warum Ärzte manchmal eine CT-Untersuchung und in anderen Fällen ein…
Haben Sie sich jemals gefragt, warum manche Menschen von ihrem "Lohn" sprechen, während andere ihr…
Seide oder Baumwolle: Ein ewiger Wettstreit um Weichheit und Komfort 🧵🌿 Haben Sie sich jemals…
Haben Sie sich jemals gefragt, warum manche Radfahrer scheinbar mühelos Steigungen erklimmen, während andere ins…
Staubsaugen - eine lästige Pflicht, die niemand gerne erledigt. 🧹 Doch in der Welt der…