Für eine korrekte Darstellung dieser Seite benötigen Sie einen XHTML-standardkonformen Browser, der die Darstellung von CSS-Dateien zulässt.

..
Suche

Personensuche
Veranstaltungssuche
Katalog der UB Siegen

Das Erzeuger/Verbraucher-Problem als Monitorlösung (Signalisierungsvariante 1a)
(Falsche Lösung!)

Hinweise zur Benutzung der Demo
Die Demo zeigt die Lösung des Erzeuger/Verbraucher-Problems mit einem Monitor, wobei versucht wurde, die Aufrufe von signal() so zu optimieren, daß sie nur ausgeführt werden, wenn die Bedingung gerade hergestellt wurde.
Versuchen Sie, einen Ablauf zu finden, in dem sich das Programm falsch verhält, z.B. einer der Verbraucher verhungert!
  • Hinweis: Falls Sie oben kein Java-Applet sehen, unterstützt Ihr Browser keine Java-Applets mehr. In diesem Fall gehen Sie bitte wie folgt vor:
    • Laden Sie sich die Zip-Datei mit den Demos herunter.
    • Entpacken Sie die Datei.
    • Nun können Sie das Applet mit dem Kommando appletviewer <html-Datei> ausführen.
  • Im linken Teil sind dargestellt:
    • Der Zustand des Monitors, bestehend aus:
      • Dem Monitor-Lock, d.h. der (internen) Sperrvariable, die dem Monitor zugeordnet ist. Die Farben bedeuten:
        • grün: Monitor ist frei (Wert = 1)
        • gelb: Monitor ist belegt, kein wartender Thread (Wert = 0)
        • rot: Monitor ist belegt, Threads warten (Wert < 0)
      • Den Bedingungsvariablen des Monitors. Die Farben bedeuten:
        • grün: kein wartender Thread
        • orange: mindestens ein Thread wartet an der Bedingungsvariable
      • Den anderen Monitor-Variablen, hier dem Zähler der belegten Pufferplätze.
    • Der Puffer mit 5 Pufferplätzen. Ein blauer Hintergrund zeigt an, daß der jeweilige Pufferplatz belegt ist.
    • Ein Feld zum globalen Einzelschrittbetrieb. Bei jedem Drücken des 'Einzelschritt'-Knopfes führt ein rechenbereiter Thread die nächste Codezeile aus.
      Über die Combo-Box 'Strategie' kann die Auswahlstrategie festgelegt werden:
      • Random: zufällig
      • RR, Round Robin: die Threads werden reihum ausgewählt; ein Thread, der einen Schritt ausgeführt hat und rechenbereit ist, stellt sich hinten wieder an.
      • FIFO: ein Thread wird solange ausgeführt, bis er blockiert. Erst dann kommt der nächste Thread.
      • Prio: die Threads erhalten eine Priorität, die von links oben nach rechts unten abnimmt. Es wird immer der rechenbereite Thread mit der höchsten Priorität ausgeführt.
      • rev. Prio: die Threads erhalten eine Priorität, die von links oben nach rechts unten zunimmt. Es wird immer der rechenbereite Thread mit der höchsten Priorität ausgeführt.
  • Im rechten Teil sind die beteiligten Threads (bzw. Prozesse) mit ihrem Quellcode dargestellt.
    • Die blaugrüne Markierung zeigt die nächste auszuführende Codezeile an.
    • Eine rote Markierung bedeutet, daß der Thread in dieser Zeile blockiert ist, weil der auf den (Wieder-)Eintritt in den Monitor wartet.
    • Eine orange Markierung zeigt an, daß der Thread an der Bedingungsvariable wartet.
    Wenn der 'Einzelschritt'-Knopf gedrückt wird, führt der Thread die nächste Codezeile aus.
    Dargestellt ist für jeden Thread nur die jeweilige Methode, die er ausführt. Die Methode wird zyklisch ausgeführt, d.h. nach dem Verlassen tritt der Thread im nächsten Schritt wieder in die Methode ein.
  • Zum Zurücksetzen der Demo drücken Sie den 'Reload'-Knopf Ihres Browsers.