next up previous contents index
Weiter: 9.2 Task-Typen und Hinauf: 9 Tasks Zurück: 9 Tasks

9.1 Multitasking in Ada

  

Tasks sind Objekte im Sinne von Ada, d.h., man kann unterschiedliche Task-Typen   definieren und beliebig viele Objekte dieses Typs anlegen. So ist es zum Beispiel möglich, Arrays von Tasks anzulegen, einen Task als Komponente eines Records zu haben oder Pointer auf Tasks zu definieren und später Tasks dynamisch (mit new) anzulegen.

Wie schon von den anderen, höheren Sprachmitteln Adas gewohnt, besteht ein Task aus einem Spezifikations-  und einem Implementationsteil , dem Body . Bei der Spezifikation eines Tasks definiert man seine Entries.    Das sind jene Bestandteile, die man von außerhalb des Tasks aufrufen kann. Sie können auch Parameter haben. Der Body des Tasks legt dann das Verhalten beim Aufruf so eines Entry's fest. Die Sprache definiert, daß immer nur genau ein Entry eines Tasks gleichzeitig aktiviert werden kann. Gleichzeitig eintreffende Aufrufe werden in einer Warteschlange gereiht.

Ein einfaches Beispiel für die Spezifikation eines Tastatur-Treibers ist folgendes:

task type Tastatur_Treiber is
entry read (c: out character);
entry write(c: in character);
end Tastatur_Treiber;

Aufgrund der obigen Eigenschaften von Ada-Tasks ist durch die Spezifikation des Treibers als Task im Gegensatz zu einer Spezifikation als Paket gesichert, daß immer nur genau ein (anderer) Task Lese- und Schreiboperationen durchführen kann.

Falls nur ein Task gebraucht wird, kann das Schlüsselwort type nach task entfallen. Dann wird nur der Spezifikations- und Implementationsteil eines Tasks definiert, man kann jedoch keine weiteren Task-Objekte anlegen.



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