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