| .TH RENDEZVOUS 3 |
| .SH NAME |
| rendezvous \- user level process synchronization |
| .SH SYNOPSIS |
| .B #include <u.h> |
| .br |
| .B #include <libc.h> |
| .PP |
| .B |
| ulong rendezvous(ulong tag, ulong value) |
| .SH DESCRIPTION |
| The rendezvous system call allows two processes to synchronize and |
| exchange a value. |
| In conjunction with the shared memory system calls |
| (see |
| .IR segattach (3) |
| and |
| .IR fork (3)), |
| it enables parallel programs to control their scheduling. |
| .PP |
| Two processes wishing to synchronize call |
| .I rendezvous |
| with a common |
| .IR tag , |
| typically an address in |
| memory they share. |
| One process will arrive at the rendezvous first; |
| it suspends execution until a second arrives. |
| When a second process meets the rendezvous |
| the |
| .I value |
| arguments are exchanged between the processes and returned |
| as the result of the respective |
| .I rendezvous |
| system calls. |
| Both processes are awakened when |
| the rendezvous succeeds. |
| .PP |
| The set of tag values which two processes may use to rendezvous\(emtheir tag space\(emis |
| inherited when a process forks, unless |
| .B RFREND |
| is set in the argument to |
| .BR rfork ; |
| see |
| .IR fork (3). |
| .PP |
| If a rendezvous is interrupted the return value is |
| .BR ~0 , |
| so that value should not be used in normal communication. |
| .SH SOURCE |
| .B /usr/local/plan9/src/libc/9syscall |
| .SH SEE ALSO |
| .IR segattach (3), |
| .IR fork (3) |
| .SH DIAGNOSTICS |
| Sets |
| .IR errstr . |