Weiter: 19.2 Das Produzent/Konsument-Problem
Hinauf: Entwurf von Echtzeit-
Zurück: Entwurf von Echtzeit-
Schon im vorhergehenden Kapitel haben wir aufgezeigt, daß das Rendezvous-Konzept
in Ada asymmetrisch ist. Damals waren wir deshalb mit dem Problem
des Pollings konfrontiert, das wir aber durch geschickte Programmierung
lösen konnten. Das Rendezvous ist in mehrerer Hinsicht asymmetrisch
(vgl. [NS88]):
-
Der rufende Task muß den Namen des aufgerufenen Tasks und die seiner
Entries kennen, nicht aber umgekehrt.
-
Der Aufruf eines Task-Entry's kann innerhalb eines Unterprogrammes
(als Teil eines Tasks oder als Teil eines eigenen Paketes) oder
im Initialisierungsteil eines Paket-Body's erfolgen, eine Accept-Anweisung
kann jedoch nur in einem
Task-Body
stehen.
-
Ein rufender Task kann nur genau einen Task aufrufen. Er kann sich
nur in einer einzigen Warteschlange eines Task-Entry's befinden.
Ein aufgerufener Task hingegen kann auf viele verschiedene Aufrufe
warten und kann viele Warteschlangen
haben, wo Tasks warten.
Aus diesen Eigenschaften des Ada-Tasking-Modells folgt, daß man
folgende Arten von Tasks unterscheiden kann:
-
aktive Tasks sind Tasks,
die andere Tasks aufrufen, aber selbst keine Entries haben
-
passive Tasks sind Tasks,
die Entries haben, aber selbst keine Tasks aufrufen
-
Mischformen sind Tasks,
die sowohl Entries haben, als auch andere Tasks aufrufen
Allgemeiner kann man auch zwischen
aktiven
und
passiven Objekten
und entsprechenden
Mischform-Objekten unterscheiden.
Passive Objekte, die keine eigene Aktivitäten aufweisen (z.B. kein Else-Zweig im Task),
können unter Umständen auch als geschützte Objekte realisiert werden.
Das reduziert die Anzahl der benötigten Tasks und sollte daher, wenn möglich,
durchgeführt werden.
Johann Blieberger
Wed Feb 11 09:58:52 MET 1998