File : queue_test_protected.adb
with Queue_Pack_Protected; use Queue_Pack_Protected;
with Ada.Text_IO; use Ada.Text_IO;
procedure Queue_Test_Protected is
Queue : Protected_Queue;
task Producer is entry shutdown; end Producer;
task Consumer is end Consumer;
task body Producer is
Item : Element;
Got_It : Boolean;
begin
loop
select
accept shutdown; exit; -- main task loop
else
Get_Immediate (Item, Got_It);
if Got_It then
Queue.Enqueue (Item); -- task might be blocked here!
else
delay 0.1; --sec.
end if;
end select;
end loop;
end Producer;
task body Consumer is
Item : Element;
begin
loop
Queue.Dequeue (Item); -- task might be blocked here!
Put ("Received: "); Put (Item); Put_Line ("!");
if Item = 'q' then
Put_Line ("Shutting down producer"); Producer.Shutdown;
Put_Line ("Shutting down consumer"); exit; -- main task loop
end if;
end loop;
end Consumer;
begin
null;
end Queue_Test_Protected;