D.5.2 Dynamic Priorities for Protected Objects
1/2
This clause specifies how the priority of a protected
object can be modified or queried at run time.
Static Semantics
2/2
The following attribute
is defined for a
prefix
P that denotes a protected object:
3/2
P'Priority
Denotes a non-aliased component
of the protected object P. This component is of type System.Any_Priority
and its value is the priority of P. P'Priority denotes a variable if
and only if P denotes a variable. A reference to this attribute shall
appear only within the body of P.
4/2
The initial value of this attribute is the initial
value of the priority of the protected object, and can be changed by
an assignment.
Dynamic Semantics
5/2
If the locking policy Ceiling_Locking (see
D.3)
is in effect then the ceiling priority of a protected object
P
is set to the value of
P'Priority at the end of each protected
action of
P.
6/2
If the locking policy Ceiling_Locking is in effect,
then for a protected object
P with either an Attach_Handler or
Interrupt_Handler pragma applying to one of its procedures, a check is
made that the value to be assigned to
P'Priority is in the range
System.Interrupt_Priority. If the check fails, Program_Error is raised.
Metrics
7/2
The implementation
shall document the following metric:
8/2
The difference in
execution time of calls to the following procedures in protected object
P:
9/2
protected P is
procedure Do_Not_Set_Ceiling (Pr : System.Any_Priority);
procedure Set_Ceiling (Pr : System.Any_Priority);
end P;
10/2
protected body P is
procedure Do_Not_Set_Ceiling (Pr : System.Any_Priority) is
begin
null;
end;
procedure Set_Ceiling (Pr : System.Any_Priority) is
begin
P'Priority := Pr;
end;
end P;
11/2
31 Since P'Priority is a normal variable,
the value following an assignment to the attribute immediately reflects
the new value even though its impact on the ceiling priority of P is
postponed until completion of the protected action in which it is executed.