1. -- 
  2. -- Uwe R. Zimmer, Australia, 2013 
  3. -- 
  4.  
  5. with Ada.Text_IO;          use Ada.Text_IO; 
  6. with Queue_Pack_Protected; use Queue_Pack_Protected; 
  7.  
  8. procedure Queue_Test_Protected is 
  9.  
  10.    Queue : Protected_Queue; 
  11.  
  12.    task Producer is end Producer; 
  13.    task Consumer is end Consumer; 
  14.  
  15.    task body Producer is 
  16.  
  17.       subtype Lower is Character range 'a' .. 'z'; 
  18.  
  19.    begin 
  20.       for Ch in Lower loop 
  21.          Queue.Enqueue (Ch); 
  22.       end loop; 
  23.    end Producer; 
  24.  
  25.    task body Consumer is 
  26.  
  27.       Item  : Element; 
  28.  
  29.    begin 
  30.       loop 
  31.          select 
  32.             Queue.Dequeue (Item); -- task might be blocked here! 
  33.             Put ("Received: "); Put (Item); Put_Line ("!"); 
  34.          or delay 0.001; 
  35.             exit; -- main task loop 
  36.          end select; 
  37.       end loop; 
  38.    end Consumer; 
  39.  
  40. begin 
  41.    null; 
  42. end Queue_Test_Protected;