10. Parallele Prozesse | ||||||
|
||||||
10.5 Die Verzögerungsanweisung
Ein Prozeß kann entscheiden, ob er für eine bestimmte Zeitdauer seine Aktivität suspendieren will. Dazu stellt Ada die Verzögerungsanweisung (delay_statement <BNF>) bereit. Die Verzögerungsanweisung bewirkt, daß die weitere Ausführung des Prozesses, der die Verzögerungsanweisung ausführt, mindestens so lange unterbrochen wird, wie der betreffende Parameter angibt. Dabei wird unterschieden zwischen relativen und absoluten Zeitangaben.
Diese Anweisung veranlaßt, daß dem Prozeß für mindestens 1,3 Sekunden die Prozessorkapazität entzogen wird. Der Prozeß ist blockiert. Von der Verzögerungsanweisung wird der vordefinierte Typ "duration" akzeptiert.
Wichtig ist, daß mindestens die angebene Zeit gewartet wird. Allerdings gibt Ada keine Zusicherung dazu, wann nach Ablauf dieser Zeit der Prozeß wieder aktiv wird. Die Verzögerungsanweisung kann benutzt werden, um einen kooperativen Prozeßwechsel zu initiieren. Da der Prozeß automatisch in den Zustand blockiert übergeht, bekommt das Zuteilungsverfahren die Möglichkeit, eventuell einem anderen Prozeß die Prozessorkapazität zuzuteilen.
Ein Prozeß in einer Endlosschleife initiiert nach jedem Durchlauf einen Prozeßwechsel. Für die Verzögerung mit absoluter Zeitangabe erwartet die Verzögerungsanweisung einen Parameter vom Typ "time", der im Paket "Ada.Calendar" definiert ist. Dieses Paket enthält die notwendigen Prozeduren zum Berechnen von Zeitpunkten und von Zeitdauern. Duration ist ein vordefinierter Festpunkttyp zum Darstellen von Zeitdauern, während Time ein privater Datentyp zum Darstellen von Zeitpunkten ist. Auf Time sind diverse Unterprogramme und Operatoren definiert.
Zwischen jedem Durchlauf wird bis zu dem nächsten Zeitpunkt gewartet. Hier gilt wieder, daß mindestens bis zu dem angegebenen Zeitpunkt gewartet wird, aber ohne Zusicherung, daß der Prozeß den Prozessor erhält, wenn der Zeitpunkt überschritten ist. |
||||||
|