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