sleep(9)

NAME

sleep, msleep, tsleep, wakeup - wait for events

SYNOPSIS

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
int
tsleep(void *ident, int priority,  const  char  *wmesg,  int
timo);
int
msleep(void  *ident,  struct  mtx  *mtx, int priority, const
char *wmesg,
        int timo);
void
wakeup(void *ident);
void
wakeup_one(void *ident);

DESCRIPTION

The functions tsleep() and wakeup() handle event-based pro
cess blocking.
If a process must wait for an external event, it is put on
sleep by
tsleep(). The parameter ident is an arbitrary address that
uniquely
identifies the event on which the process is being asleep.
All processes
sleeping on a single ident are woken up later by wakeup(),
often called
from inside an interrupt routine, to indicate that the re
source the process was blocking on is available now.
The parameter wmesg is a string describing the sleep condi
tion for tools
like ps(1). Due to the limited space of those programs to
display arbitrary strings, this message should not be longer than 6
characters.
The wakeup_one() function is used to make the first process
in the queue
that is sleeping on the parameter ident runnable. This can
prevent the
system from becoming saturated when a large number of pro
cesses are
sleeping on the same address, but only one of them can actu
ally do any
useful work when made runnable.
The tsleep() function is the general sleep call. Suspends
the current
process until a wakeup is performed on the specified identi
fier. The
process will then be made runnable with the specified
priority. Sleeps
at most timo / hz seconds (0 means no timeout). If the
Giant lock is not
held and mtx is NULL, then timo must be non-zero. If
priority includes
the PCATCH flag, signals are checked before and after sleep
ing, else signals are not checked. Returns 0 if awakened, EWOULDBLOCK if
the timeout
expires. If PCATCH is set and a signal needs to be deliv
ered, ERESTART
is returned if the current system call should be restarted
if possible,
and EINTR is returned if the system call should be inter
rupted by the
signal (return EINTR).
The msleep() function is a variation on tsleep. The parame
ter mtx is a
mutex which will be released before sleeping and reacquired
before
msleep() returns. If priority includes the PDROP flag, the
mtx parameter
will not be reacquired before returning. The mutex is used
to ensure
that a condition can be checked atomically, and that the
current process
can be suspended without missing a change to the condition,
or an associated wakeup.

RETURN VALUES

See above.

SEE ALSO

ps(1), malloc(9), mi_switch(9)

HISTORY

The sleep/wakeup process synchronization mechanism is very
old. It
appeared in a very early version of UNIX.
The tsleep() function appeared in 4.4BSD.
The sleep() function used to be the traditional form. It
did not let you
specify a timeout or a wmesg, hence it was discontinued.

AUTHORS

This manual page was written by Jorg Wunsch <joerg@FreeB
SD.org>.
BSD December 17, 1998
Copyright © 2010-2024 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout