Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SLEEP(9)		 BSD Kernel Developer's	Manual		      SLEEP(9)

     sleep, msleep, tsleep, wakeup -- wait for events

     #include <sys/param.h>
     #include <sys/systm.h>
     #include <sys/proc.h>

     tsleep(void *ident, int priority, const char *wmesg, int timo);

     msleep(void *ident, struct	mtx *mtx, int priority,	const char *wmesg,
	 int timo);

     wakeup(void *ident);

     wakeup_one(void *ident);

     The functions tsleep() and	wakeup() handle	event-based process 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 resource the
     process was blocking on is	available now.

     The parameter wmesg is a string describing	the sleep condition for	tools
     like ps(1).  Due to the limited space of those programs to	display	arbi-
     trary 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 processes are
     sleeping on the same address, but only one	of them	can actually 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 identifier.  The
     process will then be made runnable	with the specified priority.  Sleeps
     at	most timo / hz seconds (0 means	no timeout).  If pri includes the
     PCATCH flag, signals are checked before and after sleeping, else signals
     are not checked.  Returns 0 if awakened, EWOULDBLOCK if the timeout ex-
     pires.  If	PCATCH is set and a signal needs to be delivered, ERESTART is
     returned if the current system call should	be restarted if	possible, and
     EINTR is returned if the system call should be interrupted	by the signal
     (return EINTR).

     The msleep() function is a	variation on tsleep.  The parameter mtx	is a
     mutex which will be released before sleeping and reacquired before
     msleep() returns.	If pri 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

     See above.

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

     The sleep/wakeup process synchronization mechanism	is very	old.  It ap-
     peared 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.

     This man page was written by Jorg Wunsch <>.

BSD			       December	17, 1998			   BSD


Want to link to this manual page? Use this URL:

home | help