Rendezvous

Das Rendezvous ist ein Konstrukt der Programmiersprache Ada. Es dient der Synchronisierung und der Kommunikation nebenläufiger Threads.

Der Empfänger akzeptiert (ggf. nur wenn eine zugehörige Bedingung erfüllt ist) den Aufruf einer oder mehrerer Operationen.

select
  [when <condition> =>]
  accept <name>(<parameter>: IN | OUT <type>, ...) do
    ...
  end <name>;
  ...
or
  ...
else
  ...
end select;


Auf der Senderseite werden die Operationen aufgerufen. Während des Aufrufs, d.h. während der Empfänger die Anweisungen zwischen dem accept und dem end (siehe oben) ausführt, ist der Sender blockiert. Die Syntax für den Aufruf unterscheidet sich nicht vom normalen Prozeduraufruf.

<name>(<argument>, ...)


Wenn der Empfänger nicht bereit ist, den Aufruf einer Operation entgegenzunehmen, muss der Sender warten, bis das der Fall ist. Der Sender kann ein Timeout vereinbaren und alternative Anweisungen ausführen, wenn der Aufruf nicht vor Ablauf des Timeouts erfolgen kann.

select
  <name>(<argument>, ...)
or
  delay <time>;
...
end select;


Der Sender kann auch auf dem sofortigen Aufruf der Operation bestehen. Alternative Anweisungen werden in diesem Fall ausgeführt, wenn der sofortige Aufruf nicht möglich ist.

select
  <name>(<argument>, ...)
else
  ...
end select;


Links

http://www.iuma.ulpgc.es/users/jmiranda/gnat-rts/node21.htm
http://www.adacore.com/wp-content/files/attachments/Ada_Distilled.pdf