next up previous contents index
Weiter: 9.6 Familien von Hinauf: 9.5 Das Rendezvous-Konzept Zurück: 9.5.3 Der Private-Teil

9.5.4 Wie der rufende Task das Rendezvous beeinflussen kann

Abschließend wollen wir noch eingehend erörtern, wie ein Studierender auf unser Szenario reagieren kann. Viele Studenten können etwa nicht ,,endlos`` darauf warten, daß sie der Assistent betreuen kann, vielmehr haben sie nur beschränkt Zeit, da sie z.B. anschließend eine Vorlesung hören wollen. Eine solche Art der Problemstellung könnten wir wie folgt programmieren:

select
Assistent.betreue;
or
delay 1560.0; -Minuten
besuche_Vorlesung;
end select;

In diesem Fall wartet der Studierende maximal 15 Minuten auf die Möglichkeit des Rendezvous, dann bricht er das Warten ab und besucht eine Vorlesung. Das Laufzeitsystem nimmt dabei den wartenden Studenten-Task aus der zum Entry betreue gehörenden Warteschlange und setzt ihn fort. Auch hier kann anstatt der Delay-Anweisung eine Delay-Until-Anweisung stehen.

Ein äußerst ungeduldiger Student könnte etwa auch folgenderweise vorgehen:

select
Assistent.betreue;
else
lauf_weg;
end select;

In diesem Fall würde der Studenten-Task die im Else-Zweig angegebenen Anweisungen ausführen, wenn das Rendezvous nicht unmittelbar durchführbar ist oder sofort eine Requeue-Anweisung with abort durchgeführt wird.

Es gibt auch noch die sogenannte asynchrone Select-Anweisung.   Bleiben wir bei unserem Beispiel:

select
Assistent.betreue;
then abort
lauf_weg;
end select;

Das bedeutet dann, daß der Studenten-Task die im ,,then abort``-Zweig stehenden Anweisung ausführt, wenn das Rendezvous nicht unmittelbar möglich ist oder wenn im Laufe des Rendevous ein requeue with abort ausgeführt wird. Sollte das Rendezvous unmittelbar möglich sein und während des Rendevous kein requeue with abort auftreten, wird der ,,then abort``-Zweig nicht ausgeführt.

Die letzte Möglichkeit, die dem Studierenden bleibt, seine Betreuung durch einen Assistenten zu gestalten, sieht so aus:

select
delay 1560.0; -Minuten
besuche_vorlesung;
then abort
Assistent.betreue;
end select;

Hier wird nach Ablauf der angebenen Zeit versucht, die im ,,then abort``-Zweig stehenden Anweisungen abzubrechengif. Danach werden die zwischen der Delay-Anweisung und den Schlüsselwörtern then abort stehenden Anweisungen ausgeführt.

Sollte die Berechnung im ,,then abort``-Zweig beendet sein, bevor die Zeit abgelaufen ist, so wird versucht, die Delay-Anweisung abzubrechen. Wenn das gutgeht, ist die gesamte Anweisung korrekt beendet.



next up previous contents index
Weiter: 9.6 Familien von Hinauf: 9.5 Das Rendezvous-Konzept Zurück: 9.5.3 Der Private-Teil

Johann Blieberger
Wed Feb 11 09:58:52 MET 1998