1/2
This clause specifies how the priority of a protected object can be modified or queried at run time.
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.
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.
7/2
The implementation shall document the following metric:
8/2
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;
NOTES
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.