next up previous contents index
Weiter: Deklaration geschützer Objekte Hinauf: Geschützte Objekte Zurück: Spezifikation und Implementierung

Die unterschiedlichen Operationstypen geschützter Objekte

Man kann Prozeduren, Funktionen und Entries für geschützte Records definieren. Mit Funktionen kann nur lesenderweise auf die geschützten Daten zugegriffen werden. Das heißt, daß gegebenenfalls Funktionen zur selben Zeit ausgeführt werden können. Aber nie eine Prozedur gleichzeitig mit einer anderen Operation. Dasselbe gilt für einen Entry.

Entries können ähnlich wie Entries von Tasks mit Wächtern versehen werden. Nur alle jene Entries, deren Wächter den Wert true ergeben, können sofort ausgeführt werden, alle anderen werden ähnlich wie bei Tasks in eine Warteschlange gestellt. Wächter bei geschützten Records unterscheiden sich von denen bei Tasks allerdings wesentlich darin, wann die entsprechenden booleschen Ausdrücke ausgewertet werden. Bei geschützten Records wird der Ausdruck eines Wächters evaluiert,

  1. wenn der entsprechende Entry aufgerufen wird und
  2. es werden die Ausdrücke aller jener Wächter ausgewertet, deren Warteschlange nicht leer ist, wenn die Abarbeitung eines Entry's oder einer Prozedur beendet ist.gif

Ein Beispiel, das auch einen Entry beinhaltet:

protected type Resource is
entry Seize;
procedure Release;
private
Busy: Boolean := False;
end Resource;

protected body Resource is
entry Seize when not Busy is
begin
Busy := True;
end Seize;

procedure Release is
begin
Busy := False;
end Release;
end Resource;

Es bleibt noch zu sagen, daß die im Kapitel 9 vorgestellte Requeue-Anweisung auch bei der Implementation von Entries geschützter Objekte verwendet werden kann und daß wie bei den Tasks im Private-Teil auch private Entries deklariert werden dürfen.



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