166492cf0SYuri Pankov.\" 266492cf0SYuri Pankov.\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for 366492cf0SYuri Pankov.\" permission to reproduce portions of its copyrighted documentation. 466492cf0SYuri Pankov.\" Original documentation from The Open Group can be obtained online at 5c10c16deSRichard Lowe.\" http://www.opengroup.org/bookstore/. 666492cf0SYuri Pankov.\" 766492cf0SYuri Pankov.\" The Institute of Electrical and Electronics Engineers and The Open 866492cf0SYuri Pankov.\" Group, have given us permission to reprint portions of their 966492cf0SYuri Pankov.\" documentation. 1066492cf0SYuri Pankov.\" 1166492cf0SYuri Pankov.\" In the following statement, the phrase ``this text'' refers to portions 1266492cf0SYuri Pankov.\" of the system documentation. 1366492cf0SYuri Pankov.\" 1466492cf0SYuri Pankov.\" Portions of this text are reprinted and reproduced in electronic form 1566492cf0SYuri Pankov.\" in the SunOS Reference Manual, from IEEE Std 1003.1, 2004 Edition, 1666492cf0SYuri Pankov.\" Standard for Information Technology -- Portable Operating System 1766492cf0SYuri Pankov.\" Interface (POSIX), The Open Group Base Specifications Issue 6, 1866492cf0SYuri Pankov.\" Copyright (C) 2001-2004 by the Institute of Electrical and Electronics 1966492cf0SYuri Pankov.\" Engineers, Inc and The Open Group. In the event of any discrepancy 2066492cf0SYuri Pankov.\" between these versions and the original IEEE and The Open Group 2166492cf0SYuri Pankov.\" Standard, the original IEEE and The Open Group Standard is the referee 2266492cf0SYuri Pankov.\" document. The original Standard can be obtained online at 2366492cf0SYuri Pankov.\" http://www.opengroup.org/unix/online.html. 2466492cf0SYuri Pankov.\" 25c10c16deSRichard Lowe.\" This notice shall appear on any product containing this material. 2666492cf0SYuri Pankov.\" 2766492cf0SYuri Pankov.\" The contents of this file are subject to the terms of the 2866492cf0SYuri Pankov.\" Common Development and Distribution License (the "License"). 2966492cf0SYuri Pankov.\" You may not use this file except in compliance with the License. 3066492cf0SYuri Pankov.\" 3166492cf0SYuri Pankov.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 3266492cf0SYuri Pankov.\" or http://www.opensolaris.org/os/licensing. 3366492cf0SYuri Pankov.\" See the License for the specific language governing permissions 3466492cf0SYuri Pankov.\" and limitations under the License. 3566492cf0SYuri Pankov.\" 3666492cf0SYuri Pankov.\" When distributing Covered Code, include this CDDL HEADER in each 3766492cf0SYuri Pankov.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE. 3866492cf0SYuri Pankov.\" If applicable, add the following below this CDDL HEADER, with the 3966492cf0SYuri Pankov.\" fields enclosed by brackets "[]" replaced with your own identifying 4066492cf0SYuri Pankov.\" information: Portions Copyright [yyyy] [name of copyright owner] 4166492cf0SYuri Pankov.\" 4266492cf0SYuri Pankov.\" 4366492cf0SYuri Pankov.\" Copyright 1991, 1992, 1994, The X/Open Company Ltd. 4466492cf0SYuri Pankov.\" Copyright (c) 2001, The IEEE and The Open Group. All Rights Reserved. 4566492cf0SYuri Pankov.\" Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved. 468b6b46dcSRobert Mustacchi.\" Copyright 2024 Oxide Computer Company 4766492cf0SYuri Pankov.\" 488b6b46dcSRobert Mustacchi.Dd June 23, 2024 498b6b46dcSRobert Mustacchi.Dt PTHREAD_COND_WAIT 3C 508b6b46dcSRobert Mustacchi.Os 518b6b46dcSRobert Mustacchi.Sh NAME 528b6b46dcSRobert Mustacchi.Nm pthread_cond_wait , 538b6b46dcSRobert Mustacchi.Nm pthread_cond_clockwait , 548b6b46dcSRobert Mustacchi.Nm pthread_cond_timedwait , 558b6b46dcSRobert Mustacchi.Nm pthread_cond_relclockwait_np , 568b6b46dcSRobert Mustacchi.Nm pthread_cond_reltimedwait_np 578b6b46dcSRobert Mustacchi.Nd wait on a condition 588b6b46dcSRobert Mustacchi.Sh LIBRARY 598b6b46dcSRobert Mustacchi.Lb libc 608b6b46dcSRobert Mustacchi.Sh SYNOPSIS 618b6b46dcSRobert Mustacchi.Ft int 628b6b46dcSRobert Mustacchi.Fo pthread_cond_wait 638b6b46dcSRobert Mustacchi.Fa "pthread_cond_t *restrict cond" 648b6b46dcSRobert Mustacchi.Fa "pthread_mutex_t *restrict mutex" 658b6b46dcSRobert Mustacchi.Fc 668b6b46dcSRobert Mustacchi.Ft int 678b6b46dcSRobert Mustacchi.Fo pthread_cond_clockwait 688b6b46dcSRobert Mustacchi.Fa "pthread_cond_t *restrict cond" 698b6b46dcSRobert Mustacchi.Fa "pthread_mutex_t *restrict mutex" 708b6b46dcSRobert Mustacchi.Fa "clockid_t clock" 718b6b46dcSRobert Mustacchi.Fa "const struct timespec *restrict abstime" 728b6b46dcSRobert Mustacchi.Fc 738b6b46dcSRobert Mustacchi.Ft int 748b6b46dcSRobert Mustacchi.Fo pthread_cond_timedwait 758b6b46dcSRobert Mustacchi.Fa "pthread_cond_t *restrict cond" 768b6b46dcSRobert Mustacchi.Fa "pthread_mutex_t *restrict mutex" 778b6b46dcSRobert Mustacchi.Fa "const struct timespec *restrict abstime" 788b6b46dcSRobert Mustacchi.Fc 798b6b46dcSRobert Mustacchi.Ft int 808b6b46dcSRobert Mustacchi.Fo pthread_cond_relclockwait_np 818b6b46dcSRobert Mustacchi.Fa "pthread_cond_t *restrict cond" 828b6b46dcSRobert Mustacchi.Fa "pthread_mutex_t *restrict mutex" 838b6b46dcSRobert Mustacchi.Fa "clockid_t clock" 848b6b46dcSRobert Mustacchi.Fa "const struct timespec *restrict reltime" 858b6b46dcSRobert Mustacchi.Fc 868b6b46dcSRobert Mustacchi.Ft int 878b6b46dcSRobert Mustacchi.Fo pthread_cond_reltimedwait_np 888b6b46dcSRobert Mustacchi.Fa "pthread_cond_t *restrict cond" 898b6b46dcSRobert Mustacchi.Fa "pthread_mutex_t *restrict mutex" 908b6b46dcSRobert Mustacchi.Fa "const struct timespec *restrict reltime" 918b6b46dcSRobert Mustacchi.Fc 928b6b46dcSRobert Mustacchi.Sh DESCRIPTION 938b6b46dcSRobert MustacchiThe 948b6b46dcSRobert Mustacchi.Fn pthread_cond_wait , 958b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait , 968b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait , 978b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np , 988b6b46dcSRobert Mustacchiand 998b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 1008b6b46dcSRobert Mustacchifunctions are used to block on a condition variable. 1018b6b46dcSRobert MustacchiThey must be called with 1028b6b46dcSRobert Mustacchi.Fa mutex 1038b6b46dcSRobert Mustacchilocked by the calling thread or undefined behavior will result. 1048b6b46dcSRobert Mustacchi.Pp 1058b6b46dcSRobert MustacchiThese functions atomically release 1068b6b46dcSRobert Mustacchi.Fa mutex 1078b6b46dcSRobert Mustacchiand cause the calling thread to block on the condition variable 1088b6b46dcSRobert Mustacchi.Fa cond . 1098b6b46dcSRobert MustacchiAtomically here means atomically with respect to access by another thread to 1108b6b46dcSRobert Mustacchithe mutex and then the condition variable. 1118b6b46dcSRobert MustacchiThat is, if another thread is able to acquire the mutex after the about-to-block 1128b6b46dcSRobert Mustacchithread has released it, then a subsequent call to 1138b6b46dcSRobert Mustacchi.Xr pthread_cond_signal 3C 1148b6b46dcSRobert Mustacchior 1158b6b46dcSRobert Mustacchi.Xr pthread_cond_broadcast 3C 1168b6b46dcSRobert Mustacchiin that thread behaves as if it were issued after the about-to-block thread has 1178b6b46dcSRobert Mustacchiblocked. 1188b6b46dcSRobert Mustacchi.Pp 119c10c16deSRichard LoweUpon successful return, the mutex has been locked and is owned by the calling 1208b6b46dcSRobert Mustacchithread. 1218b6b46dcSRobert MustacchiIf mutex is a robust mutex where an owner terminated while holding the lock and 1228b6b46dcSRobert Mustacchithe state is recoverable, the mutex is acquired even though the function returns 1238b6b46dcSRobert Mustacchian error value. 1248b6b46dcSRobert Mustacchi.Pp 125c10c16deSRichard LoweWhen using condition variables there is always a boolean predicate, an 126c10c16deSRichard Loweinvariant, associated with each condition wait that must be true before the 1278b6b46dcSRobert Mustacchithread should proceed. 1288b6b46dcSRobert MustacchiSpurious wakeups from the 1298b6b46dcSRobert Mustacchi.Fn pthread_cond_wait , 1308b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait , 1318b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait , 1328b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np , 1338b6b46dcSRobert Mustacchior 1348b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 1358b6b46dcSRobert Mustacchifunctions could occur. 1368b6b46dcSRobert MustacchiThe return from these functions does not imply anything about the value of this 1378b6b46dcSRobert Mustacchipredicate and the predicate must always be reevaluated. 1388b6b46dcSRobert Mustacchi.Pp 1398b6b46dcSRobert MustacchiThe order in which blocked threads are awakened by 1408b6b46dcSRobert Mustacchi.Xr pthread_cond_signal 3C 1418b6b46dcSRobert Mustacchior 1428b6b46dcSRobert Mustacchi.Xr pthread_cond_broadcast 3C 1438b6b46dcSRobert Mustacchiis determined by the scheduling policy. 1448b6b46dcSRobert MustacchiSee 145*10d41d99SChris Fraire.Xr pthreads 7 . 1468b6b46dcSRobert Mustacchi.Pp 147c10c16deSRichard LoweThe effect of using more than one mutex for concurrent 1488b6b46dcSRobert Mustacchi.Fn pthread_cond_wait , 1498b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait , 1508b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait , 1518b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np , 1528b6b46dcSRobert Mustacchior 1538b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 1548b6b46dcSRobert Mustacchioperations on the same condition variable will result in undefined behavior. 1558b6b46dcSRobert Mustacchi.Pp 1568b6b46dcSRobert MustacchiA condition wait 1578b6b46dcSRobert Mustacchi.Pq whether timed or not 1588b6b46dcSRobert Mustacchiis a cancellation point. 1598b6b46dcSRobert MustacchiWhen the cancelability enable state of a thread is set to 1608b6b46dcSRobert Mustacchi.Dv PTHREAD_CANCEL_DEFERRED , 161c10c16deSRichard Lowea side effect of acting upon a cancellation request while in a condition wait 162c10c16deSRichard Loweis that the mutex is reacquired before calling the first cancellation cleanup 163c10c16deSRichard Lowehandler. 1648b6b46dcSRobert Mustacchi.Pp 165c10c16deSRichard LoweA thread that has been unblocked because it has been canceled while blocked in 1668b6b46dcSRobert Mustacchia call to any of these functions does not consume any condition signal that may 1678b6b46dcSRobert Mustacchibe directed concurrently at the condition variable if there are other threads 1688b6b46dcSRobert Mustacchiblocked on the condition variable. 1698b6b46dcSRobert Mustacchi.Pp 1708b6b46dcSRobert MustacchiThe 1718b6b46dcSRobert Mustacchi.Fn pthread_cond_wait 1728b6b46dcSRobert Mustacchifunction will block forever until it is signaled. 1738b6b46dcSRobert MustacchiWith the other functions, it is possible to bound the amount of time that the 1748b6b46dcSRobert Mustacchicalling thread will block waiting to be signaled. 1758b6b46dcSRobert MustacchiWhen a timeout occurs, the calling threads will return with the mutex held, but 1768b6b46dcSRobert Mustacchiwill instead indicate an error occurred. 1778b6b46dcSRobert Mustacchi.Pp 1788b6b46dcSRobert MustacchiIn general, the system provides the ability to program timeouts against 1798b6b46dcSRobert Mustacchieither the realtime clock, 1808b6b46dcSRobert Mustacchi.Dv CLOCK_REALTIME , 1818b6b46dcSRobert Mustacchiwhich measures the wall clock and is subject to changes due to time 1828b6b46dcSRobert Mustacchisynchronization daemons such as NTP and PTP, or the high-resolution clock, 1838b6b46dcSRobert Mustacchi.Dv CLOCK_HIGHRES , 1848b6b46dcSRobert Mustacchiwhich is a non-adjustable high-resolution clock that is provided by 1858b6b46dcSRobert Mustacchisystem hardware. 1868b6b46dcSRobert MustacchiThe specified timeout may either be specified as an absolute time in the 1878b6b46dcSRobert Mustacchifuture or as a relative amount of time that should elapse. 1888b6b46dcSRobert MustacchiEach clock has its own resolution, which can be determined by 1898b6b46dcSRobert Mustacchi.Xr clock_getres 3C . 1908b6b46dcSRobert MustacchiTimeouts may be rounded up to a given clock's resolution. 1918b6b46dcSRobert Mustacchi.Pp 1928b6b46dcSRobert MustacchiThe 1938b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait 1948b6b46dcSRobert Mustacchiand 1958b6b46dcSRobert Mustacchi.Fn pthrad_cond_reltimedwait_np 1968b6b46dcSRobert Mustacchifunctions determine which clock they use to wait based upon the clock that the 1978b6b46dcSRobert Mustacchicondition variable was created with. 1988b6b46dcSRobert MustacchiBy default, all timed condition variables utilize the realtime clock, 1998b6b46dcSRobert Mustacchi.Dv CLOCK_REALTIME . 2008b6b46dcSRobert MustacchiThe default clock may be changed on a per-condition variable basis by setting 2018b6b46dcSRobert Mustacchithe condition variable's attributes with the 2028b6b46dcSRobert Mustacchi.Xr pthread_condattr_setclock 3C 2038b6b46dcSRobert Mustacchifunction when creating the condition variable. 2048b6b46dcSRobert Mustacchi.Pp 2058b6b46dcSRobert MustacchiThe 2068b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait 2078b6b46dcSRobert Mustacchiand 2088b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np 2098b6b46dcSRobert Mustacchifunctions ignore the condition variable's defined clock and instead utilize the 2108b6b46dcSRobert Mustacchiclock specified by the 2118b6b46dcSRobert Mustacchi.Fa clock 2128b6b46dcSRobert Mustacchiargument. 2138b6b46dcSRobert MustacchiWhile there are additional clocks in the system, only 2148b6b46dcSRobert Mustacchi.Dv CLOCK_REALTIME 2158b6b46dcSRobert Mustacchior 2168b6b46dcSRobert Mustacchi.Dv CLOCK_HIGHRES 2178b6b46dcSRobert Mustacchimay be specified. 2188b6b46dcSRobert MustacchiThe thread and process-specific CPU time clocks cannot be used. 2198b6b46dcSRobert Mustacchi.Pp 2208b6b46dcSRobert MustacchiThe 2218b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait 2228b6b46dcSRobert Mustacchiand 2238b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait 2248b6b46dcSRobert Mustacchifunctions treat the timeout value, 2258b6b46dcSRobert Mustacchi.Fa abstime , 2268b6b46dcSRobert Mustacchias the absolute time in the future when the timeout should expire. 2278b6b46dcSRobert MustacchiConversely, the 2288b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np 2298b6b46dcSRobert Mustacchiand 2308b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 2318b6b46dcSRobert Mustacchifunctions operate in terms of a relative time. 2328b6b46dcSRobert MustacchiThe timer will expire when a specified amount of time passes on the 2338b6b46dcSRobert Mustacchiclock as indicated by 2348b6b46dcSRobert Mustacchi.Fa reltime . 2358b6b46dcSRobert Mustacchi.Pp 2368b6b46dcSRobert MustacchiThe 2378b6b46dcSRobert Mustacchi.Fn pthread_cond_wait , 2388b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait , 2398b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait , 2408b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np , 2418b6b46dcSRobert Mustacchior 2428b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 2438b6b46dcSRobert Mustacchifunctions split the errors that they return into those that occur before and 2448b6b46dcSRobert Mustacchithose that occur after dropping the lock in any form. 2458b6b46dcSRobert MustacchiIn particular, error checking is guaranteed to occur before releasing the mutex 2468b6b46dcSRobert Mustacchiand waiting on the condition variable. 2478b6b46dcSRobert MustacchiThe errors 2488b6b46dcSRobert Mustacchi.Er ETIMEDOUT , 2498b6b46dcSRobert Mustacchi.Er EOWNERDEAD , 2508b6b46dcSRobert Mustacchiand 2518b6b46dcSRobert Mustacchi.Er ENOTRECOVERABLE 2528b6b46dcSRobert Mustacchiare the only errors that may occur after a wait has begun. 2538b6b46dcSRobert MustacchiThe latter two errors only apply to a robust mutex. 2548b6b46dcSRobert MustacchiNo matter why the calling functions return, they will always return with the 2558b6b46dcSRobert Mustacchimutex 2568b6b46dcSRobert Mustacchi.Fa mutex 2578b6b46dcSRobert Mustacchiheld, excepting certain unrecoverable robust mutexes. 2588b6b46dcSRobert MustacchiIn addition, if the calling thread that is waiting on a condition variable 2598b6b46dcSRobert Mustacchitakes a signal, the thread will never return 2608b6b46dcSRobert Mustacchi.Er EINTR . 2618b6b46dcSRobert MustacchiIt may resume blocking or potentially deliver a spurious wakeup. 2628b6b46dcSRobert Mustacchi.Sh RETURN VALUES 2638b6b46dcSRobert MustacchiUpon successful completion, the 2648b6b46dcSRobert Mustacchi.Fn pthread_cond_wait , 2658b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait , 2668b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait , 2678b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np , 2688b6b46dcSRobert Mustacchiand 2698b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 2708b6b46dcSRobert Mustacchifunctions return 0. 2718b6b46dcSRobert MustacchiOtherwise, an error value is returned to indicate the error. 2728b6b46dcSRobert Mustacchi.Sh ERRORS 2738b6b46dcSRobert MustacchiThe 2748b6b46dcSRobert Mustacchi.Fn pthread_cond_wait , 2758b6b46dcSRobert Mustacchi.Fn pthread_cond_clockwait , 2768b6b46dcSRobert Mustacchi.Fn pthread_cond_timedwait , 2778b6b46dcSRobert Mustacchi.Fn pthread_cond_relclockwait_np , 2788b6b46dcSRobert Mustacchiand 2798b6b46dcSRobert Mustacchi.Fn pthread_cond_reltimedwait_np 2808b6b46dcSRobert Mustacchifunctions will fail if: 2818b6b46dcSRobert Mustacchi.Bl -tag -width Er 2828b6b46dcSRobert Mustacchi.It Er EPERM 2838b6b46dcSRobert MustacchiThe mutex type is 2848b6b46dcSRobert Mustacchi.Dv PTHREAD_MUTEX_ERRORCHECK 2858b6b46dcSRobert Mustacchior the mutex is a robust mutex, and the current thread does not own the mutex. 2868b6b46dcSRobert Mustacchi.It Er ETIMEDOUT 2878b6b46dcSRobert MustacchiThe absolute or relative time specified by 2888b6b46dcSRobert Mustacchi.Fa abstime 2898b6b46dcSRobert Mustacchiand 2908b6b46dcSRobert Mustacchi.Fa reltime 2918b6b46dcSRobert Mustacchirespectively, has passed. 2928b6b46dcSRobert MustacchiThis does not apply to 2938b6b46dcSRobert Mustacchi.Fn pthread_cond_wait . 2948b6b46dcSRobert Mustacchi.It Er EINVAL 2958b6b46dcSRobert MustacchiOne or more of the values specified by 2968b6b46dcSRobert Mustacchi.Fa cond , 2978b6b46dcSRobert Mustacchi.Fa mutex , 2988b6b46dcSRobert Mustacchi.Fa abstime , 2998b6b46dcSRobert Mustacchior 3008b6b46dcSRobert Mustacchi.Fa reltime 301c10c16deSRichard Loweis invalid. 3028b6b46dcSRobert Mustacchi.Pp 3038b6b46dcSRobert MustacchiDifferent mutexes were supplied for concurrent operation on the same condition 304c10c16deSRichard Lowevariable. 3058b6b46dcSRobert Mustacchi.Pp 3068b6b46dcSRobert MustacchiThe value of 3078b6b46dcSRobert Mustacchi.Fa clock 3088b6b46dcSRobert Mustacchiis either unsupported for timing operations or the value is unknown to the 3098b6b46dcSRobert Mustacchisystem. 3108b6b46dcSRobert Mustacchi.It Er EOWNERDEAD 3118b6b46dcSRobert MustacchiThe mutex is a robust mutex initialized with the attribute 3128b6b46dcSRobert Mustacchi.Dv PTHREAD_MUTEX_ROBUST 3138b6b46dcSRobert Mustacchiand the last owner of this mutex died while holding the mutex, leaving the 3148b6b46dcSRobert Mustacchistate it was protecting possibly inconsistent. 3158b6b46dcSRobert MustacchiThe mutex is now owned by the caller. 3168b6b46dcSRobert Mustacchi.It Er ENOTRECOVERABLE 3178b6b46dcSRobert MustacchiThe mutex is a robust mutex initialized with the attribute 3188b6b46dcSRobert Mustacchi.Dv PTHREAD_MUTEX_ROBUST 3198b6b46dcSRobert Mustacchiand the mutex was protecting state that has now been left irrecoverable. 3208b6b46dcSRobert MustacchiThe mutex has not been acquired. 3218b6b46dcSRobert Mustacchi.El 3228b6b46dcSRobert Mustacchi.Sh INTERFACE STABILITY 3238b6b46dcSRobert Mustacchi.Sy Committed 3248b6b46dcSRobert Mustacchi.Sh MT-LEVEL 3258b6b46dcSRobert Mustacchi.Sy MT-Safe 3268b6b46dcSRobert Mustacchi.Sh SEE ALSO 3278b6b46dcSRobert Mustacchi.Xr clock_getres 3C , 3288b6b46dcSRobert Mustacchi.Xr pthread_cond_broadcast 3C , 3298b6b46dcSRobert Mustacchi.Xr pthread_cond_signal 3C , 3308b6b46dcSRobert Mustacchi.Xr pthread_condattr_setclock 3C , 3318b6b46dcSRobert Mustacchi.Xr pthread_mutex_lock 3C , 3328b6b46dcSRobert Mustacchi.Xr pthread_mutexattr_getrobust 3C , 3338b6b46dcSRobert Mustacchi.Xr time.h 3HEAD , 3348b6b46dcSRobert Mustacchi.Xr attributes 7 , 3358b6b46dcSRobert Mustacchi.Xr condition 7 , 3368b6b46dcSRobert Mustacchi.Xr pthreads 7 , 3378b6b46dcSRobert Mustacchi.Xr standards 7 338