Das Erzeuger/Verbraucher-Problem
(Falsche Lösung!)
|
Hinweise zur Benutzung der Demo
|
Die dargestellte Lösung des
Erzeuger-/Verbaucher-Problems ist falsch! Versuchen Sie einen Ablauf zu
finden, in dem eine Verklemmung auftritt!
- 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:
- Die verwendeten Semaphore mit dem aktuellen Wert des
Semaphor-Zählers. Die Farben bedeuten:
- grün: Semaphor ist frei (Zähler > 0)
- gelb: Semaphor ist belegt, kein wartender Thread (Zähler = 0)
- rot: Semaphor ist belegt, Threads warten (Zähler < 0)
- 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.
Wenn der 'Einzelschritt'-Knopf gedrückt wird, führt der
Thread die nächste Codezeile aus.
- Zum Zurücksetzen der Demo drücken Sie den 'Reload'-Knopf Ihres
Browsers.