2 .\" Copyright (C) 2010 The DragonFly Project. All rights reserved.
3 .\" Copyright (C) 2000 Jason Evans <jasone@FreeBSD.org>. All rights reserved.
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\" notice(s), this list of conditions and the following disclaimer as
10 .\" the first lines of this file unmodified other than the possible
11 .\" addition of one or more copyright notices.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\" notice(s), this list of conditions and the following disclaimer in the
14 .\" documentation and/or other materials provided with the distribution.
16 .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
17 .\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 .\" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
20 .\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 .\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 .\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 .\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
28 .\" $FreeBSD: src/share/man/man9/condvar.9,v 1.11 2004/11/08 18:15:11 jhb Exp $
40 .Nm cv_timedwait_sig ,
44 .Nd kernel condition variable
50 .Fn cv_init "struct cv *cvp" "const char *desc"
52 .Fn cv_destroy "struct cv *cvp"
54 .Fn cv_wait "struct cv *cvp" "struct lock *l"
56 .Fn cv_wait_sig "struct cv *cvp" "struct lock *l"
58 .Fn cv_timedwait "struct cv *cvp" "struct lock *l" "int timo"
60 .Fn cv_timedwait_sig "struct cv *cvp" "struct lock *l" "int timo"
62 .Fn cv_signal "struct cv *cvp"
64 .Fn cv_broadcast "struct cv *cvp"
66 .Fn cv_broadcastpri "struct cv *cvp" "int pri"
68 Condition variables are used in conjunction with locks to wait for conditions
70 Condition variables are created with
74 is a pointer to space for a
78 is a pointer to a null-terminated character string that describes the condition
80 Condition variables are destroyed with
82 Threads wait on condition variables by calling
87 .Fn cv_timedwait_sig .
88 Threads unblock waiters by calling
90 to unblock one waiter, or
94 to unblock all waiters.
108 .Fn cv_timedwait_sig .
109 When a thread waits on a condition,
111 is atomically released before the thread is blocked, then atomically reacquired
112 before the function call returns.
113 All waiters must pass the same
124 unblock, their calling threads are made runnable.
130 seconds before being unblocked and returning
132 otherwise, they return 0.
136 return prematurely with a value of
140 if a signal is caught, or 0 if signaled via
144 .Sh IMPLEMENTATION NOTES
145 Condition variables exist primarily for code imported from other systems; for
150 family of functions should be used instead.
152 Condition variables can currently only release
162 Otherwise, a non-zero error code is returned.
164 Condition variables are implemented in
165 .Pa /sys/kern/kern_condvar.c .
166 The public interface and structure is found in
167 .Pa /sys/sys/condvar.h .
172 Condition variables appeared in
175 This manual page was written by