Semaphor gegen Monitor
Semaphor ist eine Datenstruktur, die verwendet wird, um sicherzustellen, dass mehrere Prozesse nicht gleichzeitig auf eine gemeinsame Ressource oder einen kritischen Abschnitt in parallelen Programmierumgebungen zugreifen. Semaphoren werden verwendet, um tote Schlösser und Rassenbedingungen zu vermeiden. Monitor ist ein Programmiersprache -Konstrukt, das auch verwendet wird, um mehrere Prozesse zu vermeiden, die gleichzeitig auf eine gemeinsame Ressource zugreifen. Monitore verwenden bedingte Variablen, um diese Aufgabe zu erreichen.
Was ist ein Semaphor?
Semaphor ist eine Datenstruktur, die verwendet wird, um einen gegenseitigen Ausschluss auf kritische Abschnitte zu liefern. Semaphoren unterstützen hauptsächlich zwei Operationen namens Wait (historisch als P) und Signal (historisch als V bekannt). Der Wartevorgang blockiert einen Vorgang, bis das Semaphor geöffnet ist und der Signalvorgang ein anderer Vorgang (Thread) eingeben kann. Jedes Semaphor ist einer Warteschlange von Warte Prozessen zugeordnet. Wenn der Wartevorgang von einem Thread aufgerufen wird, kann der Thread fortgesetzt, wenn das Semaphor geöffnet ist. Wenn das Semaphor geschlossen ist, wenn der Wartevorgang von einem Thread aufgerufen wird, ist der Thread blockiert und muss in der Warteschlange warten. Die Signaloperation öffnet ein Semaphor und wenn in der Warteschlange bereits ein Thread wartet, darf dieser Vorgang fortfahren. Wenn in der Warteschlange keine Threads warten, wird das Signal für die nächsten Threads erinnert. Es gibt zwei Arten von Semaphoren, die als Mutex -Semaphoren bezeichnet werden und Semaphoren zählen. MUTEX -Semaphoren ermöglichen einen einzelnen Zugriff auf eine Ressource und das Zählen von Semaphoren ermöglichen es mehreren Threads, auf eine Ressource zuzugreifen (mit mehreren Einheiten verfügbar).
Was ist ein Monitor?
Ein Monitor ist ein Programmiersprachenkonstrukt, das zur Steuerung des Zugriffs auf gemeinsam genutzte Daten verwendet wird. Monitore verkapseln gemeinsam genutzte Datenstrukturen, Verfahren (die mit gemeinsam genutzten Datenstrukturen arbeiten) und die Synchronisation zwischen gleichzeitigen Verfahrensaufrufe. Ein Monitor sorgt dafür. Ein Monitor garantiert den gegenseitigen Ausschluss, indem nur ein Thread zu einem bestimmten Zeitpunkt ein Überwachungsverfahren ausführen kann. Wenn ein anderer Thread versucht, eine Methode im Monitor aufzurufen, während ein Thread bereits eine Prozedur im Monitor ausführt, ist 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 Planungssemantik.
Was ist der Unterschied zwischen Semaphor und Monitor?
Obwohl sowohl die Semaphoren als auch die Monitore verwendet werden, um gegenseitige Ausschluss in parallelen Programmierumgebungen zu erreichen, unterscheiden sie sich in den Techniken, die zur Erreichung dieser Aufgabe verwendet werden. In Monitoren befindet sich der Code, der zur Erzielung eines gegenseitigen Ausschlusses verwendet wird, an einem einzigen Ort und strukturierter, während der Code für Semaphoren als Warte- und Signalfunktionsaufrufe verteilt werden. Außerdem ist es sehr einfach, bei der Implementierung von Semaphoren Fehler zu machen, während es eine sehr geringe Chance gibt, bei der Implementierung von Monitoren Fehler zu machen. Darüber hinaus verwenden Monitore Zustandsvariablen, während Semaphoren dies nicht tun.