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 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 sleeping, else sig-
     nals 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 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 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 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