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.
111 .Fn cv_timedwait_sig .
112 When a thread waits on a condition,
114 is atomically released before the thread is blocked, then atomically reacquired
115 before the function call returns.
116 All waiters must pass the same
127 unblock, their calling threads are made runnable.
133 seconds before being unblocked and returning
135 otherwise, they return 0.
139 return prematurely with a value of
143 if a signal is caught, or 0 if signaled via
147 .Sh IMPLEMENTATION NOTES
148 Condition variables exist primarily for code imported from other systems; for
153 family of functions should be used instead.
155 Condition variables can currently only release
165 Otherwise, a non-zero error code is returned.
167 Condition variables are implemented in
168 .Pa /sys/kern/kern_condvar.c .
169 The public interface and structure is found in
170 .Pa /sys/sys/condvar.h .
175 Condition variables appeared in
178 This manual page was written by