next up previous contents index
Weiter: Geschützte Objekte Hinauf: 9 Tasks Zurück: 9.9 Rendezvous und

9.10 Die Termination von Tasks

   

So always look on the bright side of death!
Just before you draw your terminal breath.
Life's a piece of shit,
When you look at it.

Aus Monty Python's  ,,Das Leben des Brian``.

Jedem Task ist eine Vatereinheit zugeordnet. Das kann jener Programmteil sein, in dem das entsprechende Task-Objekt deklariert ist (also z.B. eine Prozedur, ein Paket oder ein anderer Task), oder der Programmteil, in dem das entsprechende Task-Objekt dynamisch mit new angelegt worden ist. Man sagt in diesem Fall, daß der Task von seiner Vatereinheit abhängt. In allen Fällen gilt, daß die Exekution der Vatereinheit nicht beendet werden kann, bevor alle von der Vatereinheit abhängigen Tasks sich beendet haben oder beendet worden sind.

Wie wird aber nun ein Task beendet oder wie kann er sich selbst beenden? Die erste Frage haben wir schon beantwortet: mit der Abort-Anweisung aus Kapitel 9.4.3. Für die zweite Frage gibt es zwei Antworten:

  1. Der Task erreicht die letzte Anweisung seines Body's.
  2. Wie wir bereits oben gesehen haben, bestehen Tasks gewöhnlich aus einer Select-Anweisung innerhalb einer Endlosschleife. Klarerweise kann so ein Task nie die letzte Anweisung seines Body's erreichen. Um trotzdem eine halbwegs annehmbare Möglichkeit zur Beendigung (Termination) eines solchen Tasks zu schaffen, erlaubt Ada eine Terminate-Alternative    in einer Select-Anweisung, z.B.:

    task body Assistent is
    begin
    loop
    select
    when Sprechstunde =>
    accept betreue do
    -betreuedenStudierenden
    end betreue;
    or
    accept organisiere(Aufgabe: Aufgaben_Typ) do
    -organisiere
    end organisiere;
    or
    terminate;
    end select;
    end loop;
    end Assistent;

    In diesem Fall kann sich der Task beenden, wenn alle von ihm abhängigen Tasks sich entweder bereits beendet haben, oder wenn sie eine Terminate-Alternative haben und gerade kein Rendezvous durchführen.


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