Руководство по Ada (Ada 2022)
9.7.3 Условные вызовы входов
Вызов conditional_entry_call осуществляет вызов входа, который затем отменяется, если он не выбран немедленно (или если переупорядочение с отбрасыванием вызова не выбрано немедленно). Вызов процедуры может появиться вместо вызова входа в случаях, когда процедуру можно реализовать с помощью входа.
Синтаксис
conditional_entry_call ::=
select
entry_call_alternative
else
последовательность_операторов
end select;
select
entry_call_alternative
else
последовательность_операторов
end select;
Динамические семантика
Выполнение conditional_entry_call определяется как эквивалентное выполнению timed_entry_call со delay_alternative, задающим время немедленного истечения срока, и той же самой последовательностью_операторов, что и после ключевого слова else.
ПРИМЕЧАНИЕ Вызов conditional_entry_call может на короткое время увеличить атрибут Count входа, даже если условный вызов не выбран.
Примеры
Пример условного вызова входа:
procedure Spin(R : in out Resource) is -- см. 9.4
begin
loop
select
R.Seize;
return;
else
null; -- ожидание занятости
end select;
end loop;
end;
begin
loop
select
R.Seize;
return;
else
null; -- ожидание занятости
end select;
end loop;
end;