Unterschied zwischen Semaphor und Monitor

Unterschied zwischen Semaphor und Monitor
Unterschied zwischen Semaphor und Monitor

Video: Unterschied zwischen Semaphor und Monitor

Video: Unterschied zwischen Semaphor und Monitor
Video: Empörung oder Ressentiment in der Pandemie 2024, November
Anonim

Semaphor vs. Monitor

Semaphore ist eine Datenstruktur, die verwendet wird, um sicherzustellen, dass mehrere Prozesse in parallelen Programmierumgebungen nicht gleichzeitig auf eine gemeinsame Ressource oder einen kritischen Abschnitt zugreifen. Semaphore werden verwendet, um Deadlocks und Race-Conditions zu vermeiden. Monitor ist ein Programmiersprachenkonstrukt, das auch verwendet wird, um zu verhindern, dass mehrere Prozesse gleichzeitig auf eine gemeinsame Ressource zugreifen, und garantiert somit einen gegenseitigen Ausschluss. Monitore verwenden bedingte Variablen, um diese Aufgabe zu erfüllen.

Was ist ein Semaphor?

Semaphore ist eine Datenstruktur, die verwendet wird, um kritische Abschnitte gegenseitig auszuschließen. Semaphoren unterstützen hauptsächlich zwei Operationen namens Warten (historisch bekannt als P) und Signal (historisch bekannt als V). Die Warteoperation blockiert einen Prozess, bis das Semaphor geöffnet ist, und die Signaloperation erlaubt einem anderen Prozess (Thread) den Eintritt. Jedem Semaphor ist eine Warteschlange wartender Prozesse zugeordnet. Wenn die Warteoperation von einem Thread aufgerufen wird, kann der Thread fortfahren, wenn das Semaphor geöffnet ist. Wenn die Semaphore geschlossen wird, wenn die Wait-Operation von einem Thread aufgerufen wird, wird der Thread blockiert und muss in der Warteschlange warten. Die Signaloperation öffnet ein Semaphor, und wenn bereits ein Thread in der Warteschlange wartet, darf dieser Prozess fortfahren, und wenn keine Threads in der Warteschlange warten, wird das Signal für die nächsten Threads gespeichert. Es gibt zwei Arten von Semaphoren, die Mutex-Semaphore und Zählsemaphore genannt werden. Mutex-Semaphore ermöglichen einen einzelnen Zugriff auf eine Ressource, und Zählsemaphore ermöglichen mehreren Threads den Zugriff auf eine Ressource (die mehrere verfügbare Einheiten hat).

Was ist ein Monitor?

Ein Monitor ist ein Programmiersprachenkonstrukt, das verwendet wird, um den Zugriff auf gemeinsam genutzte Daten zu kontrollieren. Monitore kapseln gemeinsam genutzte Datenstrukturen, Prozeduren (die auf gemeinsam genutzten Datenstrukturen arbeiten) und Synchronisation zwischen gleichzeitigen Prozeduraufrufen. Ein Monitor stellt sicher, dass seine Daten keinem unstrukturierten Zugriff ausgesetzt sind, und garantiert, dass Tritte (die über seine Verfahren auf die Daten des Monitors zugreifen) auf legitime Weise interagieren. Ein Monitor garantiert den gegenseitigen Ausschluss, indem er zu einem bestimmten Zeitpunkt nur einem Thread erlaubt, eine Monitorprozedur auszuführen. 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 namens Hoare-Monitore und Mesa-Monitore. Sie unterscheiden sich hauptsächlich in ihrer Scheduling-Semantik.

Was ist der Unterschied zwischen Semaphor und Monitor?

Obwohl sowohl die Semaphore als auch die Monitore verwendet werden, um einen gegenseitigen Ausschluss in parallelen Programmierumgebungen zu erreichen, unterscheiden sie sich in den Techniken, die verwendet werden, um diese Aufgabe zu erfüllen. In Monitoren befindet sich der Code, der zum Erreichen des gegenseitigen Ausschlusses verwendet wird, an einer einzigen Stelle und ist strukturierter, während Code für Semaphoren als Warte- und Signalfunktionsaufrufe verteilt werden. Außerdem ist es sehr einfach, Fehler bei der Implementierung von Semaphoren zu machen, während die Wahrscheinlichkeit, Fehler zu machen, bei der Implementierung von Monitoren sehr gering ist. Außerdem verwenden Monitore Bedingungsvariablen, während Semaphore dies nicht tun.

Empfohlen: