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

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
CONDVAR(9)	       FreeBSD Kernel Developer's Manual	    CONDVAR(9)

NAME
     condvar, cv_init, cv_destroy, cv_wait, cv_wait_sig, cv_timedwait,
     cv_timedwait_sig, cv_signal, cv_broadcast,	cv_broadcastpri, cv_wmesg --
     kernel condition variable

SYNOPSIS
     #include <sys/param.h>
     #include <sys/proc.h>
     #include <sys/condvar.h>

     void
     cv_init(struct cv *cvp, const char	*desc);

     void
     cv_destroy(struct cv *cvp);

     void
     cv_wait(struct cv *cvp, struct mtx	*mp);

     int
     cv_wait_sig(struct	cv *cvp, struct	mtx *mp);

     int
     cv_timedwait(struct cv *cvp, struct mtx *mp, int timo);

     int
     cv_timedwait_sig(struct cv	*cvp, struct mtx *mp, int timo);

     void
     cv_signal(struct cv *cvp);

     void
     cv_broadcast(struct cv *cvp);

     void
     cv_broadcastpri(struct cv *cvp, int pri);

     const char	*
     cv_wmesg(struct cv	*cvp);

DESCRIPTION
     Condition variables are used in conjunction with mutexes to wait for con-
     ditions to	occur.	Condition variables are	created	with cv_init(),	where
     cvp is a pointer to space for a struct cv,	and desc is a pointer to a
     null-terminated character string that describes the condition variable.
     Condition variables are destroyed with cv_destroy().  Threads wait	on
     condition variables by calling cv_wait(), cv_wait_sig(), cv_timedwait(),
     or	cv_timedwait_sig().  Threads unblock waiters by	calling	cv_signal() to
     unblock one waiter, or cv_broadcast() or cv_broadcastpri()	to unblock all
     waiters.  In addition to waking waiters, cv_broadcastpri()	ensures	that
     all of the	waiters	have a priority	of at least pri	by raising the prior-
     ity of any	threads	that do	not.  cv_wmesg() returns the description
     string of cvp, as set by the initial call to cv_init().

     A thread must hold	mp before calling cv_wait(), cv_wait_sig(),
     cv_timedwait(), or	cv_timedwait_sig().  When a thread waits on a condi-
     tion, mp is atomically released before the	thread is blocked, then	atomi-
     cally reacquired before the function call returns.	 All waiters must pass
     the same mp in conjunction	with cvp.

     When cv_wait(), cv_wait_sig(), cv_timedwait(), and	cv_timedwait_sig()
     unblock, their calling threads are	made runnable.	cv_timedwait() and
     cv_timedwait_sig()	wait for at most timo /	HZ seconds before being
     unblocked and returning EWOULDBLOCK; otherwise, they return 0.
     cv_wait_sig() and cv_timedwait_sig() return prematurely with a value of
     EINTR or ERESTART if a signal is caught, or 0 if signaled via cv_signal()
     or	cv_broadcast().

RETURN VALUES
     If	successful, cv_wait_sig(), cv_timedwait(), and cv_timedwait_sig()
     return 0.	Otherwise, a non-zero error code is returned.

     cv_wmesg()	returns	the description	string that was	passed to cv_init().

ERRORS
     cv_wait_sig() and cv_timedwait_sig() will fail if:

     [EINTR]		An unmasked signal was caught.

     [ERESTART]		A masked signal	was caught.

     cv_timedwait() and	cv_timedwait_sig() will	fail if:

     [EWOULDBLOCK]	Timeout	expired.

SEE ALSO
     msleep(9),	mtx_pool(9), mutex(9), sema(9),	sx(9)

FreeBSD	6.0		       December	11, 2000		   FreeBSD 6.0

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=condvar&sektion=9&manpath=FreeBSD+6.0-RELEASE>

home | help