11. Anlage
 
zurück
11.4.2 Synchronisationssteuerung


In der Anlage "Echtzeitsysteme" sind zwei Pakete zur Synchronisationssteuerung definiert.
Ein Paket (synchrone Steuerung von parallelen Prozessen) erlaubt einem parallelen Prozeß, sich selbst zu suspendieren. Das andere Paket (asynchrone Steuerung von parallelen Prozessen) erlaubt einem parallelen Prozeß, andere parallele Prozesse zu suspendieren. Beide Pakete sollten nur als letztes Mittel verwendet werden, wenn keine anderen Möglichkeiten zur Erreichung der echtzeitspezifischen Anforderungen zur Verfügung stehen und nachgewiesen wurde, daß die Verwendung dieser Pakete effizienter ist als die Verwendung von geschützten Objekten. Einige Ada-Übersetzer stellen Implementierungen von geschützten Objekten zur Verfügung, die genauso effizient sind wie die Implementierungen der "Low-Level"-Primitive der Pakete: Das vordefinierte Paket "Ada.Synchronous_Task_Control" stellt ein Konstrukt zur Verfügung, das mit einem binären Semaphor Ähnlichkeit besitzt. Ein Objekt vom Typ "suspension_object" besitzt zwei Werte: true und false. Mit Hilfe von vordefinierten Prozeduren kann der Programmierer ein Objekt vom Typ "suspension_object" setzen oder abfragen. Die Prozedur "Suspend_Until_True" ermöglicht es, wechselseitigen Ausschluß zwischen zwei parallelen Prozessen zu realisieren, indem ihre kritischen Bereiche gekapselt werden.

Mutex : Suspension_Object;
...
Set_True (Mutex);
...
Suspend_Until_True (Mutex);
--- Kritischer Bereich
Set_True (Mutex);


Spezifikation des Paketes "Ada.Synchronous_Task_Control"


Das vordefinierte Paket "Ada.Asynchronous_Task_Control" stellt Prozeduren zur Verfügung, mit denen ein paralleler Prozeß einen anderen parallelen Prozeß suspendieren bzw. wieder zur Ausführung bringen kann.

Die Prozedur "Hold" bekommt einen Parameter vom Typ "Ada.Task.Identification.Task_Id" und setzt den mit diesem Wert identifizierten parallelen Prozeß in den Wartezustand. Ein paralleler Prozeß im Wartezustand kann nicht ausgeführt werden. Wird jedoch ein paralleler Prozeß, der eine aktive Priorität geerbt hat, die größer als seine Basispriorität ist, in den Wartezustand gesetzt, so stoppt er erst dann seine Ausführung, wenn seine aktive Priorität wieder auf seine Basispriorität gesetzt wurde.

Die Prozedur "Continue" bekommt einen Parameter vom Typ "Ada.Task_Identification.Task_Id" und befreit den mit diesem Wert identifizierten parallelen Prozeß vom Wartezustand. Dieser parallele Prozeß kann seine Ausführung fortsetzen, sobald ein Prozessor verfügbar ist.

Spezifikation des Paketes "Ada.Asynchronous_Task_Control"


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.