Rendezvous basieren auf der Prämisse, daß Synchronisierungen und Datenübertragungen nicht voneinander zu trennen sind. Die Kommunikation in CSP beruht darauf, und CSP hat seinerseits sehr das Rendezvous-Konzept in Ada beeinflußt. Der Sinn dieser Prämisse liegt in der leichteren Beweisführung. Wenn der Datenlieferant T1 eine Vorbedingung P bezüglich seines Zustands zum Zeitpunkt der Datenübertragung erfüllt, dann kann der Datenempfänger T2 zum Zeitpunkt des Empfangs immer noch von P ausgehen. Diese Art der Beweistechnik wurde schon beim Monitorkonzept von Hoare vorgeschlagen.
Wie der Name bereits nahelegt, findet ein Rendezvous immer zwischen genau zwei Tasks statt. Eine Task bietet hier einen Service (entry) an, der von anderen in Anspruch genommen werden kann. Der Service-Anbieter erfährt dabei nicht die Identität des Interessenten, während auf der anderen Seite die den Service ausnutzende Task den Service-Anbieter kennen muß.
Zusätzlich ist es möglich, auf verschiedene Ereignisse gleichzeitig zu reagieren. Dabei kann die Akzeptanz von dem lokalen Zustand der Tasks abhängig gemacht werden und u.U. von der Anzahl der Tasks, die auf einen bestimmten Service warten. Das läßt sich an einem Beispiel für einen Ringpuffer demonstrieren:
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;
Die Bedingungen vor den accept-Anweisungen (guards) werden zu Beginn der select-Anweisung alle bewertet. Nur die Bedingungen, die mit TRUE bewertet worden sind, kommen dann in die Auswahl einer der accept-Anweisungen.