9.5 Intertask Communication
1
The primary
means for intertask communication is provided by calls on entries and
protected subprograms. Calls on protected subprograms allow coordinated
access to shared data objects. Entry calls allow for blocking the caller
until a given condition is satisfied (namely, that the corresponding
entry is open — see
9.5.3), and then
communicating data or control information directly with another task
or indirectly via a shared protected object.
Static Semantics
2
Any
call on an entry or on a protected subprogram identifies a
target
object for the operation, which is either a task (for an entry call)
or a protected object (for an entry call or a protected subprogram call).
The target object is considered an implicit parameter to the operation,
and is determined by the operation
name (or
prefix) used in the call on the operation,
as follows:
3
- If it is a direct_name
or expanded name that denotes the declaration (or body) of the operation,
then the target object is implicitly specified to be the current instance
of the task or protected unit immediately enclosing the operation; such
a call is defined to be an internal call;
4
- If it
is a selected_component that is not an expanded
name, then the target object is explicitly specified to be the task or
protected object denoted by the prefix of
the name; such a call
is defined to be an external call;
5
- If the name
or prefix is a dereference (implicit or explicit)
of an access-to-protected-subprogram value, then the target object is
determined by the prefix of the Access attribute_reference
that produced the access value originally, and the call is defined to
be an external call;
6
- If the name
or prefix denotes a subprogram_renaming_declaration,
then the target object is as determined by the name
of the renamed entity.
7
A
corresponding definition of target object applies to a
requeue_statement
(see
9.5.4), with a corresponding distinction
between an
internal requeue and an
external requeue.
Legality Rules
7.1/2
The view of the target protected object associated
with a call of a protected procedure or entry shall be a variable.
Dynamic Semantics
8
Within the body of a protected operation, the current
instance (see
8.6) of the immediately enclosing
protected unit is determined by the target object specified (implicitly
or explicitly) in the call (or requeue) on the protected operation.
9
Any call on a protected procedure or entry of a target
protected object is defined to be an update to the object, as is a requeue
on such an entry.