Contents Index Search Previous Next
9.7.3 Conditional Entry Calls
1
[A conditional_entry_call
issues an entry call that is then cancelled if it is not selected immediately
(or if a requeue-with-abort of the call is not selected immediately).]
1.a
To be honest: In the
case of an entry call on a protected object, it is OK if the entry is
closed at the start of the corresponding protected action, so long as
it opens and the call is selected before the end of that protected action
(due to changes in the Count attribute).
Syntax
2
conditional_entry_call
::=
select
entry_call_alternative
else
sequence_of_statements
end select;
Dynamic Semantics
3
{execution (conditional_entry_call)
[partial]} The execution of a
conditional_entry_call
is defined to be equivalent to the execution of a
timed_entry_call
with a
delay_alternative specifying
an immediate expiration time and the same
sequence_of_statements
as given after the reserved word
else.
4
37 A conditional_entry_call
may briefly increase the Count attribute of the entry, even if the conditional
call is not selected.
Examples
5
Example of a
conditional entry call:
6
procedure Spin(R : in Resource) is
begin
loop
select
R.Seize;
return;
else
null; -- busy waiting
end select;
end loop;
end;
Wording Changes from Ada 83
6.a
This clause comes after the
one for Timed Entry Calls, so we can define conditional entry calls in
terms of timed entry calls. We do that so that an "expiration time"
is defined for both, thereby simplifying the definition of what happens
on a requeue-with-abort.
Contents Index Search Previous Next Legal