xref: /illumos-gate/usr/src/man/man3c/pthread_cond_wait.3c (revision 10d41d991988b6dfe2f102d139fb64152e1614ce)
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