Unterschied zwischen Semaphor und Mutex

Semaphor gegen Mutex

Semaphore ist eine Datenstruktur, mit der sichergestellt wird, dass in parallelen Programmierumgebungen nicht mehrere Prozesse gleichzeitig auf eine gemeinsame Ressource oder einen kritischen Abschnitt zugreifen. Semaphore werden verwendet, um Dead Locks und Race-Bedingungen zu vermeiden. Mutex (Mutual Exclusion Object) wird auch verwendet, um den gleichzeitigen Zugriff auf eine gemeinsame Ressource gleichzeitig zu vermeiden.

Was ist ein Semaphor??

Semaphore ist eine Datenstruktur, die dazu dient, kritische Abschnitte gegenseitig auszuschließen. Semaphore unterstützen hauptsächlich zwei Operationen, die als Warten (historisch als P bezeichnet) und Signal (historisch als V bezeichnet) bezeichnet werden. Die Wait-Operation blockiert einen Prozess, bis das Semaphor geöffnet ist und die Signaloperation einen anderen Prozess (Thread) zulässt. Jedem Semaphor ist eine Warteschlange wartender Prozesse zugeordnet. Wenn der Wait-Vorgang von einem Thread aufgerufen wird und der Semaphor geöffnet ist, kann der Thread fortgesetzt werden. Wenn das Semaphor geschlossen wird, wenn der Wait-Vorgang von einem Thread aufgerufen wird, wird der Thread blockiert und muss in der Warteschlange warten. Die Signaloperation öffnet ein Semaphor. Wenn bereits ein Thread in der Warteschlange wartet, kann dieser Prozess fortgesetzt werden. Wenn sich in der Warteschlange keine Threads befinden, wird das Signal für die nächsten Threads gespeichert. Es gibt zwei Arten von Semaphoren, die als Mutex-Semaphore und Zähl-Semaphore bezeichnet werden. Mutex-Semaphore ermöglichen einen einzigen Zugriff auf eine Ressource und Zähl-Semaphore ermöglichen mehreren Threads den Zugriff auf eine Ressource (für die mehrere Einheiten verfügbar sind)..

Was ist ein Mutex??

Wenn eine Computeranwendung gestartet wird, wird ein Mutex erstellt und an eine Ressource angehängt. Wenn die Ressource von einem Thread verwendet wird, ist sie gesperrt, und andere Threads können sie nicht verwenden. Wenn ein anderer Thread dieselbe Ressource verwenden möchte, muss er eine Anforderung stellen. Dann wird dieser Thread in eine Warteschlange gestellt, bis der erste Thread mit der Ressource fertig ist. Wenn der erste Thread mit der Ressource fertig ist, wird die Sperre entfernt und der in der Warteschlange wartende Thread kann auf die Ressource zugreifen. Wenn sich mehrere Threads in der Warteschlange befinden, wird ihnen der Zugriff auf rotierende Basis gewährt. Wenn der Mutex den Zugriff auf eine Ressource zwischen mehreren Threads wechselt, wird er praktisch sichtbar, da mehrere Threads gleichzeitig eine Ressource verbrauchen. Intern greift jedoch zu einem bestimmten Zeitpunkt nur ein einzelner Thread auf die Ressource zu.

Was ist der Unterschied zwischen Semaphor und Mutex??

Obwohl sowohl die Semaphore als auch die Mutex-Objekte zum gegenseitigen Ausschluss in parallelen Programmierumgebungen verwendet werden, weisen sie einige Unterschiede auf. Ein Mutex-Objekt erlaubt nur einem einzelnen Thread, eine Ressource oder einen kritischen Abschnitt zu verbrauchen, während Semaphore eine begrenzte Anzahl gleichzeitiger Zugriffe auf eine Ressource zulassen (unter einer maximal zulässigen Anzahl). Bei Mutex-Objekten müssen andere Threads, die auf die Ressource zugreifen möchten, in einer Warteschlange warten, bis der aktuelle Thread mit der Ressource fertig ist.