生产者 - 消费者模式使用 Ada Rendezvous 机制

同步生产者 - 消费者解决方案确保消费者只读一次生产者所写的每个数据项。异步解决方案允许消费者对生产者的输出进行采样。消费者消费数据的速度比生成消费的速度快,或者消费者使用数据的速度比生成速度慢。采样允许消费者处理当前可用的数据。该数据可能只是所产生数据的一个采样,或者它可能已经被消耗了数据。


procedure PC_Rendezvous is
   task Producer;
   task Consumer is
      entry Buf(Item : in Integer);
   end Consumer;
   task body Producer is
   begin
      for I in 1..10 loop
         Put_Line("Producer writing" & Integer'Image(I));
         Consumer.Buf(I);
      end loop;
   end Producer;
   task body Consumer is
      Temp : Integer;
   begin
      loop
         select
            accept Buf(Item : in Integer) do
               temp := Item;
            end;
            Put_Line("Consumer read" & Integer'Image(Temp));
         or
            terminate;
         end select;
      end loop;
   end Consumer;

begin
   null;
end PC_Rendezvous;