Ich besuche derzeit den gleichzeitigen Programmierkurs an meiner Universität und wir haben kürzlich begonnen, über das Konzept eines Monitors zu sprechen. Obwohl ich die Notwendigkeit des gegenseitigen Ausschlusses verstehe, verstehe ich nicht, warum ich dafür einen Monitor verwenden würde.
So wie ich es verstehe, garantiert ein Monitor, dass sich zu jeder Zeit genau ein oder kein Prozess im kritischen Bereich befindet. Genau das können wir mit einem Semaphor erreichen. Darüber hinaus implementieren wir Monitore (oder zumindest eine Möglichkeit, sie zu implementieren) mit Semaphoren.
Warum sollte ich also etwas implementieren, das genau dasselbe tut wie ein Semaphor mit einem Semaphor? Welche Vorteile bekomme ich?
quelle
In der heutigen Vorlesung haben wir schließlich besprochen, warum Sie einen Monitor anstelle eines Semaphors verwenden würden.
Im Grunde kommt es darauf an: Der Monitor und das Semaphor sind gleichermaßen ausdrucksstark, dh Sie können eine Lösung für ein Problem mit einem Monitor finden, auf dem ursprünglich ein Semaphor verwendet wurde, und umgekehrt.
Nun, das wussten wir bereits. Warum sollten Sie also einen Monitor anstelle eines Semaphors verwenden?
Persönliche Präferenz. Normalerweise würde eine Desktop-Anwendung Monitore verwenden, was weniger Möglichkeiten für Fehler lässt, aber als Kompromiss eine relativ aufgeblähte Struktur aufweist. Semaphoren hingegen werden häufig in Betriebssystemen verwendet, da sie eine leichte Struktur darstellen, aber mehr Möglichkeiten für Fehler lassen.
Ich denke, wir können daraus schließen, dass es eine Situationsentscheidung ist, ob Sie einen Monitor oder ein Semaphor benötigen / wollen. Wenn Sie ein Echtzeitsystem erstellen, möchten Sie möglicherweise ein Semaphor verwenden. Wenn Sie ein Office-Programm erstellen, können Sie auch einen Monitor verwenden.
quelle
Werfen Sie einen Blick auf zB "Das kleine Buch der Sempaphores"von Allen B. Downey. Es gibt viele Synchronisationsprobleme an und löst sie. Überprüfen Sie insbesondere die verpfuschten Lösungen, und Sie werden sehen, dass Semaphoren ein Mechaismus auf sehr niedriger Ebene sind, sehr mächtig, aber extrem leicht zu missbrauchen, wenn einfache Fehler schreckliche Folgen haben (was durch die inhärente nichtdeterministische Funktionsweise gleichzeitiger Programme noch verschlimmert wird). Es ist zB leicht zu vergessen, den gegenseitigen Ausschluss durchzusetzen, mit dem falschen Semaphor zu arbeiten und so weiter. Monitore bieten vorgefertigte Lösungen für die am häufigsten verwendeten Fälle und bieten die meisten Vorteile der objektorientierten Programmierung (dh Sie wissen, dass der einzige Weg, mit den vom Monitor verwalteten Variablen in Konflikt zu geraten, in dessen Betrieb besteht). Der Nachteil ist, dass sie nicht einfach in nicht objektorientierte Sprachen nachgerüstet werden können.
quelle