生產者 - 消費者模式使用 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;