Modellieren wir jetzt das
Petrinetz für das Philosophenproblem.
Man benötigt:
-
Je eine Stelle für jedes Stäbchen und
-
je zwei Stellen für jeden Philosophen (er kann entweder
denken oder essen)
Dazu kommen je zwei Transitionen für die Aktionen
-
der Philosoph nimmt die Stäbchen und beginnt zu essen,
-
der Philosoph legt die Stäbchen weg und geht zum Denken
über
Zum Essen übergehen kann ein Philosoph nur dann, wenn
beide Stäbchen auf dem Tisch liegen. Das sichern wir durch drei Eingänge
für die Transition "der Philosoph nimmt die Stäbchen und beginnt
zu essen". Entsprechend gibt es drei Ausgänge, da der
Philosoph, bevor er zum Denken übergeht, die beiden Stäbchen
zurück auf den Tisch legen muß.
Nur wenn alle Eingänge Markierungen enthalten, ist das
Schalten möglich. In der Abbildung könnten also die Philosophen
1 und 2 vom Denken zum Essen übergehen. Die Philosophen 0 und 3 dagegen
können das nicht, da die Stäbchen 3 und 4 nicht auf dem Tisch
liegen. Diese Stäbchen hat Philosoph 4 in Gebrauch.
Grafik aus
"Nebenläufige Programme"
vom Springer-Verlag |
Die Schaltregeln für Petrinetze sichern auf diese Art
und Weise, daß der Übergang vom Denken zum Essen nur dann erfolgen
kann, wenn beide Stäbchen auf dem Tisch liegen. In der Programmierpraxis
ist das nicht ganz so einfach. Es sind immerhin zwei Bedingungen nacheinander
zu prüfen.
Wenn in der Zeit, in der die zweite Bedingung geprüft
wird, der Zustand der ersten verändert wird, war die ganze Prüfung
umsonst. Genauso kritisch ist die Zeit zwischen Prüfung und Zugriff
auf die Stäbchen. Es muß gesichert werden, daß in der
Zeit, die zwischen Prüfung und Zugriff oder dem Zugriff auf das erste
Stäbchen und dem Zugriff auf das zweite Stäbchen vergehen
kann, kein anderer Zugriff erfolgt. Um das zu erreichen, programmiert man
Schloßvariablen, Semaphore,
Monitore oder läßt die Prozesse über
Nachrichten miteinander kommunizieren.
zurück zur Gliederung
zur 4+5. Stunde
|
Benutzer: Gast
Besitzer: didaktik Zuletzt geändert am:
|
|
|