:man| Alphabetical   Categories   About us 
CONDVAR (9) | Kernel routines | Unix Manual Pages | :man


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


Return Values
See Also


.In sys/param.h
.In sys/proc.h
.In 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"


Condition variables are used in conjunction with mutexes to wait for conditions to occur. Condition variables are created with cv_init, where cvp is a pointer to space for a
.Vt 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 priority 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 condition, mp is atomically released before the thread is blocked, then atomically 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.


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.


cv_wait_sig and cv_timedwait_sig will fail if:
An unmasked signal was caught.
A masked signal was caught.

cv_timedwait and cv_timedwait_sig will fail if:

Timeout expired.


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

Created by Blin Media, 2008-2013