Abwechselnde Ausgabe (Falsche Lösung!) |
Hinweise zur Benutzung der Demo
|
Zwei Prozesse sollten so synchronisiert werden, daß
ihre Ausgaben immer streng abwechselnd erfolgen, also "121212...". Die
hier gezeigte (falsche!) Lösung stammt aus einer früheren Klausur.
Versuchen Sie einen Ablauf zu erzeugen, bei dem eine unzulässige
Ausgabe entsteht. Zusatzfrage: welche möglichen Ausgaben erzeugt dieses
Programm?
- 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)
- Die Ausgabe der beiden Prozesse, bzw. bei längerer Ausgabe nur die letzten Zeichen.
- 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.