Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

WS 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Beispiele

Rendezvous


Main Consumers Producers RingBuffers Rendezvous

Die Technik des Rendezvous wird in Ada als Sprachmittel zur Synchronisierung verwendet -- im wesentlich motiviert durch CSP, das kurz davor von Hoare veröffentlicht worden ist. Dieses Beispiel demonstriert, wie auf Basis von Bedingungen solche Sprachmittel realisiert werden können. Die Anwendung basiert hier auf einem Original-Beispiel der Ada-Sprachdefinition für Ringpuffer:

task BUFFERING is
   entry READ (V : out ITEM);
   entry WRITE(E : in  ITEM);
end;

task body BUFFERING is
   SIZE      : constant INTEGER := 10;
   BUFFER    : array (1 .. SIZE) of ITEM;
   INX, OUTX : INTEGER range 1 .. SIZE := 1;
   COUNT     : INTEGER range 0 .. SIZE := 0;
begin
   loop
      select
         when COUNT < SIZE =>
            accept WRITE(E : in  ITEM) do
               BUFFER(INX) := E;
            end;
            INX := INX mod SIZE + 1;
            COUNT := COUNT + 1;
      or
         when COUNT > 0 =>
            accept READ (V : out ITEM) do
               V := BUFFER(OUTX);
            end;
            OUTX := OUTX mod SIZE + 1;
            COUNT := COUNT - 1;
      end select;
   end loop;
end BUFFERING;

Consumers

Main
Bei diesem Testmodul ist zu beachten, daß in dieser vereinfachten Fassung nicht vorgesehen ist, einen Ringpuffer zu beenden. Entsprechend bleibt die Task des Ringpuffers auch dann aktiv, wenn der Produzent und der Konsument sich schon verabschiedet haben (anders als bei Iteratoren!), so daß sich das Programm insgesamt nicht freiwillig verabschiedet.

Producers

Rendezvous

RingBuffers

Die Quellen stehen als Shell-Archiv zur Verfügung.
WS 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Beispiele

Andreas Borchert, 15. Januar 2001