Semaphore vs Monitor
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. Monitor ist ein Programmiersprachen-Konstrukt, das auch verwendet wird, um zu vermeiden, dass mehrere Prozesse gleichzeitig auf eine gemeinsame Ressource zugreifen, wodurch ein gegenseitiger Ausschluss gewährleistet wird. Monitore verwenden zum Erreichen dieser Aufgabe bedingte Variablen.
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 Monitor??
Ein Monitor ist ein Programmiersprachen-Konstrukt, mit dem der Zugriff auf gemeinsam genutzte Daten gesteuert wird. Monitore kapseln gemeinsam genutzte Datenstrukturen, Prozeduren (die auf gemeinsam genutzten Datenstrukturen arbeiten) und die Synchronisation zwischen gleichzeitigen Prozeduraufrufen. Ein Monitor stellt sicher, dass seine Daten nicht mit unstrukturierten Zugriffen konfrontiert sind, und gewährleistet, dass Trittflächen (auf die die Monitor-Daten durch ihre Prozeduren zugreifen) auf legitime Weise interagieren. Ein Monitor garantiert den gegenseitigen Ausschluss, indem nur ein Thread zu einem bestimmten Zeitpunkt eine Überwachungsprozedur ausführt. Wenn ein anderer Thread versucht, eine Methode im Monitor aufzurufen, während ein Thread bereits eine Prozedur im Monitor ausführt, wird die zweite Prozedur blockiert und muss in der Warteschlange warten. Es gibt zwei Arten von Monitoren, die als Hoare-Monitore und Mesa-Monitore bezeichnet werden. Sie unterscheiden sich hauptsächlich in ihrer Terminsemantik.
Was ist der Unterschied zwischen Semaphor und Monitor??
Obwohl sowohl die Semaphore als auch die Monitore verwendet werden, um den gegenseitigen Ausschluss in parallelen Programmierumgebungen zu erreichen, unterscheiden sie sich in den zur Erreichung dieser Aufgabe verwendeten Techniken. In Monitoren ist der Code, der zum Erzielen des gegenseitigen Ausschlusses verwendet wird, an einer einzigen Stelle und strukturierter, während Code für Semaphore als Wartungs- und Signalfunktionsaufrufe verteilt wird. Beim Implementieren von Semaphoren ist es sehr einfach, Fehler zu machen, während bei der Implementierung von Monitoren nur sehr wenig Fehler gemacht werden. Darüber hinaus verwenden Monitore Bedingungsvariablen, Semaphore dies nicht.