xref: /dflybsd-src/share/man/man9/condvar.9 (revision 3426d2c2fbeac9a3dbd8dbb031afd28623ead0fa)
15c412bd2SSascha Wildner.\"
25c412bd2SSascha Wildner.\" Copyright (C) 2010 The DragonFly Project. All rights reserved.
35c412bd2SSascha Wildner.\" Copyright (C) 2000 Jason Evans <jasone@FreeBSD.org>. All rights reserved.
45c412bd2SSascha Wildner.\"
55c412bd2SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
65c412bd2SSascha Wildner.\" modification, are permitted provided that the following conditions
75c412bd2SSascha Wildner.\" are met:
85c412bd2SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
95c412bd2SSascha Wildner.\"    notice(s), this list of conditions and the following disclaimer as
105c412bd2SSascha Wildner.\"    the first lines of this file unmodified other than the possible
115c412bd2SSascha Wildner.\"    addition of one or more copyright notices.
125c412bd2SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
135c412bd2SSascha Wildner.\"    notice(s), this list of conditions and the following disclaimer in the
145c412bd2SSascha Wildner.\"    documentation and/or other materials provided with the distribution.
155c412bd2SSascha Wildner.\"
165c412bd2SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
175c412bd2SSascha Wildner.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
185c412bd2SSascha Wildner.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
195c412bd2SSascha Wildner.\" DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
205c412bd2SSascha Wildner.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
215c412bd2SSascha Wildner.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
225c412bd2SSascha Wildner.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
235c412bd2SSascha Wildner.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
245c412bd2SSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
255c412bd2SSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
265c412bd2SSascha Wildner.\" DAMAGE.
275c412bd2SSascha Wildner.\"
285c412bd2SSascha Wildner.\" $FreeBSD: src/share/man/man9/condvar.9,v 1.11 2004/11/08 18:15:11 jhb Exp $
295c412bd2SSascha Wildner.\"
30*3426d2c2STomohiro Kusumi.Dd June 29, 2018
315c412bd2SSascha Wildner.Dt CONDVAR 9
325c412bd2SSascha Wildner.Os
335c412bd2SSascha Wildner.Sh NAME
345c412bd2SSascha Wildner.Nm condvar ,
355c412bd2SSascha Wildner.Nm cv_init ,
365c412bd2SSascha Wildner.Nm cv_destroy ,
375c412bd2SSascha Wildner.Nm cv_wait ,
385c412bd2SSascha Wildner.Nm cv_wait_sig ,
395c412bd2SSascha Wildner.Nm cv_timedwait ,
405c412bd2SSascha Wildner.Nm cv_timedwait_sig ,
41*3426d2c2STomohiro Kusumi.Nm cv_mtx_wait ,
42*3426d2c2STomohiro Kusumi.Nm cv_mtx_wait_sig ,
43*3426d2c2STomohiro Kusumi.Nm cv_mtx_timedwait ,
44*3426d2c2STomohiro Kusumi.Nm cv_mtx_timedwait_sig ,
455c412bd2SSascha Wildner.Nm cv_signal ,
465c412bd2SSascha Wildner.Nm cv_broadcast ,
475c412bd2SSascha Wildner.Nm cv_broadcastpri
485c412bd2SSascha Wildner.Nd kernel condition variable
495c412bd2SSascha Wildner.Sh SYNOPSIS
505c412bd2SSascha Wildner.In sys/param.h
515c412bd2SSascha Wildner.In sys/systm.h
525c412bd2SSascha Wildner.In sys/condvar.h
535c412bd2SSascha Wildner.Ft void
545c412bd2SSascha Wildner.Fn cv_init "struct cv *cvp" "const char *desc"
555c412bd2SSascha Wildner.Ft void
565c412bd2SSascha Wildner.Fn cv_destroy "struct cv *cvp"
575c412bd2SSascha Wildner.Ft void
585c412bd2SSascha Wildner.Fn cv_wait "struct cv *cvp" "struct lock *l"
595c412bd2SSascha Wildner.Ft int
605c412bd2SSascha Wildner.Fn cv_wait_sig "struct cv *cvp" "struct lock *l"
615c412bd2SSascha Wildner.Ft int
625c412bd2SSascha Wildner.Fn cv_timedwait "struct cv *cvp" "struct lock *l" "int timo"
635c412bd2SSascha Wildner.Ft int
645c412bd2SSascha Wildner.Fn cv_timedwait_sig "struct cv *cvp" "struct lock *l" "int timo"
655c412bd2SSascha Wildner.Ft void
66*3426d2c2STomohiro Kusumi.Fn cv_mtx_wait "struct cv *cvp" "struct mtx *m"
67*3426d2c2STomohiro Kusumi.Ft int
68*3426d2c2STomohiro Kusumi.Fn cv_mtx_wait_sig "struct cv *cvp" "struct mtx *m"
69*3426d2c2STomohiro Kusumi.Ft int
70*3426d2c2STomohiro Kusumi.Fn cv_mtx_timedwait "struct cv *cvp" "struct mtx *m" "int timo"
71*3426d2c2STomohiro Kusumi.Ft int
72*3426d2c2STomohiro Kusumi.Fn cv_mtx_timedwait_sig "struct cv *cvp" "struct mtx *m" "int timo"
73*3426d2c2STomohiro Kusumi.Ft void
745c412bd2SSascha Wildner.Fn cv_signal "struct cv *cvp"
755c412bd2SSascha Wildner.Ft void
765c412bd2SSascha Wildner.Fn cv_broadcast "struct cv *cvp"
775c412bd2SSascha Wildner.Ft void
785c412bd2SSascha Wildner.Fn cv_broadcastpri "struct cv *cvp" "int pri"
795c412bd2SSascha Wildner.Sh DESCRIPTION
805c412bd2SSascha WildnerCondition variables are used in conjunction with locks to wait for conditions
815c412bd2SSascha Wildnerto occur.
825c412bd2SSascha WildnerCondition variables are created with
835c412bd2SSascha Wildner.Fn cv_init ,
845c412bd2SSascha Wildnerwhere
855c412bd2SSascha Wildner.Fa cvp
865c412bd2SSascha Wildneris a pointer to space for a
875c412bd2SSascha Wildner.Vt struct cv ,
885c412bd2SSascha Wildnerand
895c412bd2SSascha Wildner.Fa desc
905c412bd2SSascha Wildneris a pointer to a null-terminated character string that describes the condition
915c412bd2SSascha Wildnervariable.
925c412bd2SSascha WildnerCondition variables are destroyed with
935c412bd2SSascha Wildner.Fn cv_destroy .
945c412bd2SSascha WildnerThreads wait on condition variables by calling
955c412bd2SSascha Wildner.Fn cv_wait ,
965c412bd2SSascha Wildner.Fn cv_wait_sig ,
975c412bd2SSascha Wildner.Fn cv_timedwait ,
985c412bd2SSascha Wildneror
995c412bd2SSascha Wildner.Fn cv_timedwait_sig .
1005c412bd2SSascha WildnerThreads unblock waiters by calling
1015c412bd2SSascha Wildner.Fn cv_signal
1025c412bd2SSascha Wildnerto unblock one waiter, or
1035c412bd2SSascha Wildner.Fn cv_broadcast
1045c412bd2SSascha Wildneror
1055c412bd2SSascha Wildner.Fn cv_broadcastpri
1065c412bd2SSascha Wildnerto unblock all waiters.
1075c412bd2SSascha Wildner.Fn cv_broadcastpri
1085c412bd2SSascha Wildneris a synonym for
1095c412bd2SSascha Wildner.Fn cv_broadcast
1105c412bd2SSascha Wildnerin
11101123948SSascha Wildner.Dx
11201123948SSascha Wildnerand discards the
11301123948SSascha Wildner.Fa pri
11401123948SSascha Wildnerparameter.
1155c412bd2SSascha Wildner.Pp
1165c412bd2SSascha WildnerA thread must hold
1175c412bd2SSascha Wildner.Fa l
1185c412bd2SSascha Wildnerbefore calling
1195c412bd2SSascha Wildner.Fn cv_wait ,
1205c412bd2SSascha Wildner.Fn cv_wait_sig ,
1215c412bd2SSascha Wildner.Fn cv_timedwait ,
1225c412bd2SSascha Wildneror
1235c412bd2SSascha Wildner.Fn cv_timedwait_sig .
1245c412bd2SSascha WildnerWhen a thread waits on a condition,
1255c412bd2SSascha Wildner.Fa l
1265c412bd2SSascha Wildneris atomically released before the thread is blocked, then atomically reacquired
1275c412bd2SSascha Wildnerbefore the function call returns.
1285c412bd2SSascha WildnerAll waiters must pass the same
1295c412bd2SSascha Wildner.Fa l
1305c412bd2SSascha Wildnerin conjunction with
1315c412bd2SSascha Wildner.Fa cvp .
1325c412bd2SSascha Wildner.Pp
1335c412bd2SSascha WildnerWhen
1345c412bd2SSascha Wildner.Fn cv_wait ,
1355c412bd2SSascha Wildner.Fn cv_wait_sig ,
1365c412bd2SSascha Wildner.Fn cv_timedwait ,
1375c412bd2SSascha Wildnerand
1385c412bd2SSascha Wildner.Fn cv_timedwait_sig
1395c412bd2SSascha Wildnerunblock, their calling threads are made runnable.
1405c412bd2SSascha Wildner.Fn cv_timedwait
1415c412bd2SSascha Wildnerand
1425c412bd2SSascha Wildner.Fn cv_timedwait_sig
1435c412bd2SSascha Wildnerwait for at most
1445c412bd2SSascha Wildner.Fa timo
1455127ef5eSMarkus Pfeiffer/ hz seconds before being unblocked and returning
1465c412bd2SSascha Wildner.Er EWOULDBLOCK ;
1475c412bd2SSascha Wildnerotherwise, they return 0.
1485c412bd2SSascha Wildner.Fn cv_wait_sig
1495c412bd2SSascha Wildnerand
1505c412bd2SSascha Wildner.Fn cv_timedwait_sig
1515c412bd2SSascha Wildnerreturn prematurely with a value of
1525c412bd2SSascha Wildner.Er EINTR
1535c412bd2SSascha Wildneror
1545c412bd2SSascha Wildner.Er ERESTART
1555c412bd2SSascha Wildnerif a signal is caught, or 0 if signaled via
1565c412bd2SSascha Wildner.Fn cv_signal
1575c412bd2SSascha Wildneror
1585c412bd2SSascha Wildner.Fn cv_broadcast .
159*3426d2c2STomohiro Kusumi.Pp
160*3426d2c2STomohiro Kusumi.Fn cv_mtx_wait ,
161*3426d2c2STomohiro Kusumi.Fn cv_mtx_wait_sig ,
162*3426d2c2STomohiro Kusumi.Fn cv_mtx_timedwait ,
163*3426d2c2STomohiro Kusumiand
164*3426d2c2STomohiro Kusumi.Fn cv_mtx_timedwait_sig
165*3426d2c2STomohiro Kusumiwork the same as
166*3426d2c2STomohiro Kusumi.Fn cv_wait ,
167*3426d2c2STomohiro Kusumi.Fn cv_wait_sig ,
168*3426d2c2STomohiro Kusumi.Fn cv_timedwait ,
169*3426d2c2STomohiro Kusumiand
170*3426d2c2STomohiro Kusumi.Fn cv_timedwait_sig
171*3426d2c2STomohiro Kusumiexcept that they take
172*3426d2c2STomohiro Kusumi.Vt struct mtx
173*3426d2c2STomohiro Kusumiargument
174*3426d2c2STomohiro Kusumi.Fa m .
1755c412bd2SSascha Wildner.Sh IMPLEMENTATION NOTES
1765c412bd2SSascha WildnerCondition variables exist primarily for code imported from other systems; for
1775c412bd2SSascha Wildner.Dx
1785c412bd2SSascha Wildnercode, the
1795127ef5eSMarkus Pfeiffer.Fn tsleep
1805127ef5eSMarkus Pfeiffer/
1815c412bd2SSascha Wildner.Fn wakeup
1825c412bd2SSascha Wildnerfamily of functions should be used instead.
1835c412bd2SSascha Wildner.Sh RETURN VALUES
1845c412bd2SSascha WildnerIf successful,
1855c412bd2SSascha Wildner.Fn cv_wait_sig ,
1865c412bd2SSascha Wildner.Fn cv_timedwait ,
1875c412bd2SSascha Wildner.Fn cv_timedwait_sig
188*3426d2c2STomohiro Kusumi.Fn cv_mtx_wait_sig ,
189*3426d2c2STomohiro Kusumi.Fn cv_mtx_timedwait ,
190*3426d2c2STomohiro Kusumiand
191*3426d2c2STomohiro Kusumi.Fn cv_mtx_timedwait_sig
1925c412bd2SSascha Wildnerreturn 0.
1935c412bd2SSascha WildnerOtherwise, a non-zero error code is returned.
1945c412bd2SSascha Wildner.Sh FILES
1955c412bd2SSascha WildnerCondition variables are implemented in
1965c412bd2SSascha Wildner.Pa /sys/kern/kern_condvar.c .
1975c412bd2SSascha WildnerThe public interface and structure is found in
1985c412bd2SSascha Wildner.Pa /sys/sys/condvar.h .
1995c412bd2SSascha Wildner.Sh SEE ALSO
200c04308e8SMarkus Pfeiffer.Xr locking 9 ,
2015c412bd2SSascha Wildner.Xr lockmgr 9 ,
202*3426d2c2STomohiro Kusumi.Xr mutex 9 ,
2035c412bd2SSascha Wildner.Xr tsleep 9
2045c412bd2SSascha Wildner.Sh HISTORY
2055c412bd2SSascha WildnerCondition variables appeared in
2065c412bd2SSascha Wildner.Dx 2.7 .
2075c412bd2SSascha Wildner.Sh AUTHORS
2085c412bd2SSascha WildnerThis manual page was written by
2095c412bd2SSascha Wildner.An Jason Evans
2105c412bd2SSascha Wildnerfor
2115c412bd2SSascha Wildner.Fx .
212