Contents Index Search Previous Next
9.5 Intertask Communication
1
{intertask communication}
{critical section: See intertask
communication} 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
{target
object (of a call on an entry or a protected subprogram)}
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; {internal
call} 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; {external
call} such a call is defined to be an
external call;
4.a
Discussion: For example:
4.b
protected type Pt is
procedure Op1;
procedure Op2;
end Pt;
4.c
PO : Pt;
Other_Object : Some_Other_Protected_Type;
4.d
protected body Pt is
procedure Op1 is begin ... end Op1;
4.e
procedure Op2 is
begin
Op1; -- An internal call.
Pt.Op1; -- Another internal call.
PO.Op1; -- An external call. It the current instance is PO, then
-- this is a bounded error (see 9.5.1).
Other_Object.Some_Op; -- An external call.
end Op2;
end Pt;
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
{target object (of a requeue_statement)}
{internal requeue}
{external requeue}
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.
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.
8.a
To be honest: The current
instance is defined in the same way within the body of a subprogram declared
immediately within a protected_body.
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.
9.a
Reason: Read/write access
to the components of a protected object is granted while inside the body
of a protected procedure or entry. Also, any protected entry call can
change the value of the Count attribute, which represents an update.
Any protected procedure call can result in servicing the entries, which
again might change the value of a Count attribute.
Contents Index Search Previous Next Legal