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

FreeBSD Manual Pages


home | help
SLEEP(9)	       FreeBSD 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 the Giant lock	is not
     held, then	timo must be non-zero.	If priority includes the PCATCH	flag,
     signals are checked before	and after sleeping, else signals are not
     checked.  Returns 0 if awakened, EWOULDBLOCK if the timeout expires.  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

     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 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 associ-
     ated wakeup.

     See above.

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

     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.

     This manual page was written by Jorg Wunsch <>.

FreeBSD	6.0		       December	17, 1998		   FreeBSD 6.0


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

home | help