Semaphor vs Monitor
Semaphor ist eine Datenstruktur, mit der sichergestellt wird, dass mehrere Prozesse in parallelen Programmierumgebungen nicht gleichzeitig auf eine gemeinsame Ressource oder einen kritischen Abschnitt zugreifen. Semaphoren werden verwendet, um tote Schlösser und Rennbedingungen zu vermeiden. Monitor ist ein Programmiersprachenkonstrukt, das auch verwendet wird, um zu vermeiden, dass mehrere Prozesse gleichzeitig auf eine gemeinsame Ressource zugreifen. Dies garantiert den gegenseitigen Ausschluss. Monitore verwenden bedingte Variablen, um diese Aufgabe zu erfüllen.
Was ist ein Semaphor?
Semaphor ist eine Datenstruktur, die verwendet wird, um kritische Abschnitte gegenseitig auszuschließen. Semaphoren unterstützen hauptsächlich zwei Operationen, die als Warten (historisch bekannt als P) und Signal (historisch bekannt als V) bezeichnet werden. Die Warteoperation blockiert einen Prozess, bis das Semaphor geöffnet ist und die Signaloperation den Eintritt eines anderen Prozesses (Threads) ermöglicht. Jedes Semaphor ist einer Warteschlange von Warteprozessen zugeordnet. Wenn die Warteoperation von einem Thread aufgerufen wird und das Semaphor geöffnet ist, kann der Thread fortgesetzt werden. Wenn das Semaphor geschlossen wird, wenn die Warteoperation von einem Thread aufgerufen wird, wird der Thread blockiert und muss in der Warteschlange warten. Die Signaloperation öffnet ein Semaphor. Wenn sich bereits ein Thread in der Warteschlange befindet, kann dieser Prozess fortgesetzt werden. Wenn keine Threads in der Warteschlange warten, wird das Signal für die nächsten Threads gespeichert. Es gibt zwei Arten von Semaphoren, die als Mutex-Semaphoren und Zählsemaphoren bezeichnet werden. Mutex-Semaphore ermöglichen einen einzelnen Zugriff auf eine Ressource, und das Zählen von Semaphoren ermöglicht mehreren Threads den Zugriff auf eine Ressource (für die mehrere Einheiten verfügbar sind).
Was ist ein Monitor?
Ein Monitor ist ein Programmiersprachenkonstrukt, mit dem der Zugriff auf gemeinsam genutzte Daten gesteuert wird. Monitore kapseln gemeinsam genutzte Datenstrukturen, Prozeduren (die mit gemeinsam genutzten Datenstrukturen arbeiten) und die Synchronisation zwischen gleichzeitigen Prozeduraufrufen. Ein Monitor stellt sicher, dass seine Daten nicht mit unstrukturierten Zugriffen konfrontiert werden, und garantiert, dass Laufflächen (die über seine Verfahren auf die Daten des Monitors zugreifen) auf legitime Weise interagieren. Ein Monitor garantiert den gegenseitigen Ausschluss, indem nur ein Thread zu einem bestimmten Zeitpunkt eine Monitorprozedur ausführen kann. 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 Planungssemantik.
Was ist der Unterschied zwischen Semaphor und Monitor?
Obwohl sowohl die Semaphoren als auch die Monitore verwendet werden, um in Umgebungen mit paralleler Programmierung einen gegenseitigen Ausschluss zu erreichen, unterscheiden sie sich in den Techniken, die zur Erreichung dieser Aufgabe verwendet werden. In Monitoren befindet sich der Code, der zum gegenseitigen Ausschluss verwendet wird, an einer einzigen Stelle und ist strukturierter, während Code für Semaphoren als Warte- und Signalfunktionsaufrufe verteilt wird. Außerdem ist es sehr einfach, bei der Implementierung von Semaphoren Fehler zu machen, während bei der Implementierung von Monitoren nur eine sehr geringe Wahrscheinlichkeit besteht, Fehler zu machen. Außerdem verwenden Monitore Bedingungsvariablen, Semaphoren dagegen nicht.