Вот несколько вариантов, в зависимости от того, что вы ожидаете чаще:
Если вы ожидаете / хотите, чтобы Get / Put происходили чаще, чем Alive:
task body Test is
begin
loop
select
accept Get;
or
accept Put;
or
-- Pick a value that makes sense
-- This is how long you check Get
-- and Put before trying Alive
delay 0.0001;
-- Asynchronous transfer of control
-- will try Protected_Object.Alive
-- until the second delay is finished
select
-- Pick a value that makes sense
-- Should be much smaller than the above
-- delay
delay 0.0000001;
then abort
Protected_Object.Alive;
end select;
end select;
end loop;
end Test;
если вы ожидаете / хотите, чтобы Alive проверялось чаще, чем Get / Put, тогда:
task body Test is
begin
loop
select
accept Get;
or
accept Put;
else
-- Asynchronous transfer of control
-- will try Protected_Object.Alive
-- until the delay is finished
select
-- Pick a value that makes sense
delay 0.0001;
then abort
Protected_Object.Alive;
end select;
end select;
end loop;
end Test;
В любом случае вам нужно будет решить, как / когда завершить этот цикл, если это необходимо.