Weiter: Geschützte Objekte
Hinauf: 9 Tasks
Zurück: 9.9 Rendezvous und
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:
-
Der Task erreicht die letzte Anweisung seines Body's.
-
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
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