Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Plan9 1st Edition

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

segattach(2)

fork(2)

RENDEZVOUS(2)

NAME

rendezvous − user level process synchronization

SYNOPSIS

­#include <u.h>
­#include <libc.h>

ulong rendezvous(ulong tag, ulong value)

DESCRIPTION

The rendezvous system call allows two processes to synchronize and exchange a value.  In conjunction with the shared memory system calls (see segattach(2) and fork(2)), it enables parallel programs to control their scheduling.

Two processes wishing to synchronize call ­rendezvous with a common 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 ­value arguments are exchanged between the processes and returned as the result of the respective ­rendezvous system calls.  Both processes are awakened when the rendezvous succeeds. 

The tag space is common to processes in the same file name space, so ­rendezvous only works between processes in the same file name space. 

If a rendezvous is interrupted the return value is ~0, so that value should not be used in normal communication. 

SOURCE

­/sys/src/libc/9syscall

SEE ALSO

segattach(2), fork(2)

DIAGNOSTICS

Sets errstr.

BUGS

The correlation of rendezvous tags and file name space is a historical accident.  If two unrelated processes happen to be in the same name space and do a rendezvous, trouble will result.  The solution is to call ­rfork(RFNAMEG) (see fork(2)) in programs that use ­rendezvous unless they need to share the name space with their parent.  This is especially important in Alef programs. 

Plan 9  —  April 04, 1995

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026