next up previous contents index
Weiter: D Echtzeitprogrammierung Hinauf: C Systemprogrammierung Zurück: Unterstützung für Interrupts

C.2 Identifikation und Attributierung von Tasks

 

Es gibt das folgende sprachdefinierte Paket:


package Ada.Task_Identification is

type Task_ID is private;
Null_Task_ID : constant Task_ID;
function"=" (Left, Right : Task_ID) return Boolean;

function Image (T : Task_ID) return String;
function Current_Task return Task_ID;
procedure Abort_Task (T : in out Task_ID);

function Is_Terminated(T : Task_ID) return Boolean;
function Is_Callable (T : Task_ID) return Boolean;

private
... -notspecifiedbythelanguage
end Ada.Task_Identification;

Mit den Operationen dieses Pakets ist es möglich, jeden Task eindeutig zu identifizieren. Darüberhinaus existieren zwei Attribute, die sehr nützlich sind:

T'IDENTITY gibt die Task_ID des Tasks T zurück.
E'CALLER gibt die Task_ID des Tasks zurück, dessen Entry-Call gerade behandelt wird; nur erlaubt innerhalb einer Accept-Anweisung des Entry's E oder eines Entry-Body's eines Entry's E eines geschützten Objektes.

Wenn eine Instanz des generischen Pakets Ada.Task_Attributes in einer Partition geschaffen wird, so wird jeder Task, der in dieser Partition kreiert wird, implizit mit einem Objekt des generischen Parameters Attribute versehen. Dieses Objekt fungiert als benutzerdefiniertes Attribut des Tasks. Der Benutzer kann dann damit anstellen, was immer er will.


with Ada.Task_Identification; use Ada.Task_Identification;

generic
type Attribute is private;
Initial_Value : in Attribute;
package Ada.Task_Attributes is

type Attribute_Handle is access all Attribute;

function Value(T : Task_ID := Current_Task)
return Attribute;

function Reference(T : Task_ID := Current_Task)
return Attribute_Handle;

procedure Set_Value(
Val : in Attribute;
T : in Task_ID := Current_Task);

procedure Reinitialize(T : in Task_ID := Current_Task);

end Ada.Task_Attributes;



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