[ Back to the overview Matrix ]

Test case : Producer Consumer using Ada

Lines used: 43
with Ada.Text_Io; use Ada.Text_Io;

procedure Producer_Consumer is
   protected Buffer is
      entry Put(Item : in Integer);
      entry Get(Item : out Integer);
   private
      Value : Integer;
      Is_New : Boolean := False;
   end Buffer;
   
   protected body Buffer is
      entry Put(Item : in Integer) when not Is_New is
      begin
         Value := Item;
         Is_New := True;
      end Put;
      entry Get(Item : out Integer) when Is_New is
      begin
         Item := Value;
         Is_New := False;
      end Get;
   end Buffer;
   
   End_Of_Data : constant Integer := Integer'First;
   task Producer;
   
   task body Producer is
   begin
      for Num in 1..20 loop
         Buffer.Put(Num);
      end loop;
      Buffer.Put(End_Of_Data);
   end Producer;
   
   task Consumer;
   
   task body Consumer is
      Next : Integer;
   begin
      loop
         Buffer.Get(Next);
         exit when Next = End_Of_Data;
         Put_Line(Integer'Image(Next));
      end loop;
   end Consumer;
   
begin
   null;
end Producer_Consumer;
Contributed by James S. Rogers, jimmaureenrogers at worldnet.att.net