10f7d6847SJulian Elischer.\" Copyright (c) 1996 John Birrell <jb@cimlogic.com.au>. 20f7d6847SJulian Elischer.\" All rights reserved. 30f7d6847SJulian Elischer.\" 40f7d6847SJulian Elischer.\" Redistribution and use in source and binary forms, with or without 50f7d6847SJulian Elischer.\" modification, are permitted provided that the following conditions 60f7d6847SJulian Elischer.\" are met: 70f7d6847SJulian Elischer.\" 1. Redistributions of source code must retain the above copyright 80f7d6847SJulian Elischer.\" notice, this list of conditions and the following disclaimer. 90f7d6847SJulian Elischer.\" 2. Redistributions in binary form must reproduce the above copyright 100f7d6847SJulian Elischer.\" notice, this list of conditions and the following disclaimer in the 110f7d6847SJulian Elischer.\" documentation and/or other materials provided with the distribution. 120f7d6847SJulian Elischer.\" 3. All advertising materials mentioning features or use of this software 130f7d6847SJulian Elischer.\" must display the following acknowledgement: 140f7d6847SJulian Elischer.\" This product includes software developed by John Birrell. 150f7d6847SJulian Elischer.\" 4. Neither the name of the author nor the names of any co-contributors 160f7d6847SJulian Elischer.\" may be used to endorse or promote products derived from this software 170f7d6847SJulian Elischer.\" without specific prior written permission. 180f7d6847SJulian Elischer.\" 190f7d6847SJulian Elischer.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND 200f7d6847SJulian Elischer.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 210f7d6847SJulian Elischer.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 220f7d6847SJulian Elischer.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 230f7d6847SJulian Elischer.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 240f7d6847SJulian Elischer.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 250f7d6847SJulian Elischer.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 260f7d6847SJulian Elischer.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 270f7d6847SJulian Elischer.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 280f7d6847SJulian Elischer.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 290f7d6847SJulian Elischer.\" SUCH DAMAGE. 300f7d6847SJulian Elischer.\" 31*df7d7638SFelix Johnson.Dd October 12, 2021 320f7d6847SJulian Elischer.Dt PTHREAD 3 333d45e180SRuslan Ermilov.Os 340f7d6847SJulian Elischer.Sh NAME 350f7d6847SJulian Elischer.Nm pthread 360f7d6847SJulian Elischer.Nd POSIX thread functions 375b8ef52dSSimon L. B. Nielsen.Sh LIBRARY 385b8ef52dSSimon L. B. Nielsen.Lb libpthread 39c70db3ffSBruce Evans.Sh SYNOPSIS 4032eef9aeSRuslan Ermilov.In pthread.h 410f7d6847SJulian Elischer.Sh DESCRIPTION 420f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with 430f7d6847SJulian Elischerrequirements for multiple flows of control, called 448e750fa2SRuslan Ermilov.Em threads , 456d249eeeSSheldon Hearnwithin a process. 466d249eeeSSheldon HearnMultithreading is used to improve the performance of a 470f7d6847SJulian Elischerprogram. 480f7d6847SJulian Elischer.Pp 490f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following 500f7d6847SJulian Elischergroups: 518e750fa2SRuslan Ermilov.Pp 528e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact 530f7d6847SJulian Elischer.It 54d4a76febSAlexander LangerThread Routines 550f7d6847SJulian Elischer.It 560f7d6847SJulian ElischerAttribute Object Routines 570f7d6847SJulian Elischer.It 580f7d6847SJulian ElischerMutex Routines 590f7d6847SJulian Elischer.It 600f7d6847SJulian ElischerCondition Variable Routines 610f7d6847SJulian Elischer.It 62d4a76febSAlexander LangerRead/Write Lock Routines 63d4a76febSAlexander Langer.It 640f7d6847SJulian ElischerPer-Thread Context Routines 650f7d6847SJulian Elischer.It 660f7d6847SJulian ElischerCleanup Routines 670f7d6847SJulian Elischer.El 68*df7d7638SFelix Johnson.Pp 69*df7d7638SFelix Johnson.Fx 70*df7d7638SFelix Johnsonextensions to the POSIX thread functions are summarized in 71*df7d7638SFelix Johnson.Xr pthread_np 3 . 728e750fa2SRuslan Ermilov.Ss Thread Routines 738e750fa2SRuslan Ermilov.Bl -tag -width indent 74d0353b83SRuslan Ermilov.It Xo 75d0353b83SRuslan Ermilov.Ft int 768e750fa2SRuslan Ermilov.Fo pthread_create 778e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr" 788e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg" 798e750fa2SRuslan Ermilov.Fc 80d0353b83SRuslan Ermilov.Xc 810f7d6847SJulian ElischerCreates a new thread of execution. 82d0353b83SRuslan Ermilov.It Xo 83d0353b83SRuslan Ermilov.Ft int 84d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread" 85d378717eSMaxim Konovalov.Xc 86d378717eSMaxim KonovalovCancels execution of a thread. 87d378717eSMaxim Konovalov.It Xo 88d378717eSMaxim Konovalov.Ft int 89d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread" 90d0353b83SRuslan Ermilov.Xc 910f7d6847SJulian ElischerMarks a thread for deletion. 92d0353b83SRuslan Ermilov.It Xo 93d0353b83SRuslan Ermilov.Ft int 94d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2" 95d0353b83SRuslan Ermilov.Xc 960f7d6847SJulian ElischerCompares two thread IDs. 97d0353b83SRuslan Ermilov.It Xo 98d0353b83SRuslan Ermilov.Ft void 99d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr" 100d0353b83SRuslan Ermilov.Xc 1010f7d6847SJulian ElischerTerminates the calling thread. 102d0353b83SRuslan Ermilov.It Xo 103d0353b83SRuslan Ermilov.Ft int 104d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr" 105d0353b83SRuslan Ermilov.Xc 1060f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread. 107d0353b83SRuslan Ermilov.It Xo 108d0353b83SRuslan Ermilov.Ft int 109d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig" 110d0353b83SRuslan Ermilov.Xc 111d378717eSMaxim KonovalovDelivers a signal to a specified thread. 112d0353b83SRuslan Ermilov.It Xo 113d0353b83SRuslan Ermilov.Ft int 1148e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]" 115d0353b83SRuslan Ermilov.Xc 1160f7d6847SJulian ElischerCalls an initialization routine once. 117d0353b83SRuslan Ermilov.It Xo 118d0353b83SRuslan Ermilov.Ft pthread_t 119d0353b83SRuslan Ermilov.Fn pthread_self void 120d0353b83SRuslan Ermilov.Xc 1210f7d6847SJulian ElischerReturns the thread ID of the calling thread. 122d378717eSMaxim Konovalov.It Xo 123d378717eSMaxim Konovalov.Ft int 124d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate" 125d378717eSMaxim Konovalov.Xc 126d378717eSMaxim KonovalovSets the current thread's cancelability state. 127d378717eSMaxim Konovalov.It Xo 128d378717eSMaxim Konovalov.Ft int 129d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype" 130d378717eSMaxim Konovalov.Xc 131d378717eSMaxim KonovalovSets the current thread's cancelability type. 132d378717eSMaxim Konovalov.It Xo 133d378717eSMaxim Konovalov.Ft void 134d378717eSMaxim Konovalov.Fn pthread_testcancel void 135d378717eSMaxim Konovalov.Xc 136d378717eSMaxim KonovalovCreates a cancellation point in the calling thread. 137d378717eSMaxim Konovalov.It Xo 138d378717eSMaxim Konovalov.Ft void 139d378717eSMaxim Konovalov.Fn pthread_yield void 140d378717eSMaxim Konovalov.Xc 141d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one. 1420f7d6847SJulian Elischer.El 1438e750fa2SRuslan Ermilov.Ss Attribute Object Routines 1448e750fa2SRuslan Ermilov.Bl -tag -width indent 145d0353b83SRuslan Ermilov.It Xo 146d0353b83SRuslan Ermilov.Ft int 147d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr" 148d0353b83SRuslan Ermilov.Xc 1490f7d6847SJulian ElischerDestroy a thread attributes object. 150d0353b83SRuslan Ermilov.It Xo 151d0353b83SRuslan Ermilov.Ft int 1528e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched 1538e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched" 1548e750fa2SRuslan Ermilov.Fc 155d0353b83SRuslan Ermilov.Xc 1560f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object. 157d0353b83SRuslan Ermilov.It Xo 158d0353b83SRuslan Ermilov.Ft int 1598e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam 1608e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param" 1618e750fa2SRuslan Ermilov.Fc 162d0353b83SRuslan Ermilov.Xc 1630f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object. 164d0353b83SRuslan Ermilov.It Xo 165d0353b83SRuslan Ermilov.Ft int 166c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy" 167d0353b83SRuslan Ermilov.Xc 1680f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object. 169d0353b83SRuslan Ermilov.It Xo 170d0353b83SRuslan Ermilov.Ft int 171c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope" 172d0353b83SRuslan Ermilov.Xc 1730f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object. 174d0353b83SRuslan Ermilov.It Xo 175d0353b83SRuslan Ermilov.Ft int 176c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize" 177d0353b83SRuslan Ermilov.Xc 1780f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object. 179d0353b83SRuslan Ermilov.It Xo 180d0353b83SRuslan Ermilov.Ft int 181c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr" 182d0353b83SRuslan Ermilov.Xc 1830f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object. 184d0353b83SRuslan Ermilov.It Xo 185d0353b83SRuslan Ermilov.Ft int 186c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate" 187d0353b83SRuslan Ermilov.Xc 1880f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object. 189d0353b83SRuslan Ermilov.It Xo 190d0353b83SRuslan Ermilov.Ft int 191d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr" 192d0353b83SRuslan Ermilov.Xc 1930f7d6847SJulian ElischerInitialize a thread attributes object with default values. 194d0353b83SRuslan Ermilov.It Xo 195d0353b83SRuslan Ermilov.Ft int 196d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched" 197d0353b83SRuslan Ermilov.Xc 1980f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object. 199d0353b83SRuslan Ermilov.It Xo 200d0353b83SRuslan Ermilov.Ft int 2018e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam 2028e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param" 2038e750fa2SRuslan Ermilov.Fc 204d0353b83SRuslan Ermilov.Xc 2050f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object. 206d0353b83SRuslan Ermilov.It Xo 207d0353b83SRuslan Ermilov.Ft int 208d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy" 209d0353b83SRuslan Ermilov.Xc 2100f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object. 211d0353b83SRuslan Ermilov.It Xo 212d0353b83SRuslan Ermilov.Ft int 213d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope" 214d0353b83SRuslan Ermilov.Xc 2150f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object. 216d0353b83SRuslan Ermilov.It Xo 217d0353b83SRuslan Ermilov.Ft int 218d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize" 219d0353b83SRuslan Ermilov.Xc 2200f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object. 221d0353b83SRuslan Ermilov.It Xo 222d0353b83SRuslan Ermilov.Ft int 223d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr" 224d0353b83SRuslan Ermilov.Xc 2250f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object. 226d0353b83SRuslan Ermilov.It Xo 227d0353b83SRuslan Ermilov.Ft int 228d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate" 229d0353b83SRuslan Ermilov.Xc 2300f7d6847SJulian ElischerSet the detach state in a thread attributes object. 2310f7d6847SJulian Elischer.El 2328e750fa2SRuslan Ermilov.Ss Mutex Routines 2338e750fa2SRuslan Ermilov.Bl -tag -width indent 234d0353b83SRuslan Ermilov.It Xo 235d0353b83SRuslan Ermilov.Ft int 236d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" 237d0353b83SRuslan Ermilov.Xc 2380f7d6847SJulian ElischerDestroy a mutex attributes object. 239d0353b83SRuslan Ermilov.It Xo 240d0353b83SRuslan Ermilov.Ft int 241b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprioceiling "const pthread_mutexattr_t *restrict attr" "int *restrict ceiling" 242d378717eSMaxim Konovalov.Xc 243d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object. 244d378717eSMaxim Konovalov.It Xo 245d378717eSMaxim Konovalov.Ft int 246b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprotocol "const pthread_mutexattr_t *restrict attr" "int *restrict protocol" 247d378717eSMaxim Konovalov.Xc 248d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object. 249d378717eSMaxim Konovalov.It Xo 250d378717eSMaxim Konovalov.Ft int 251b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_gettype "const pthread_mutexattr_t *restrict attr" "int *restrict type" 252d378717eSMaxim Konovalov.Xc 253d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object. 254d378717eSMaxim Konovalov.It Xo 255d378717eSMaxim Konovalov.Ft int 256d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" 257d0353b83SRuslan Ermilov.Xc 2580f7d6847SJulian ElischerInitialize a mutex attributes object with default values. 259d0353b83SRuslan Ermilov.It Xo 260d0353b83SRuslan Ermilov.Ft int 261d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling" 262d378717eSMaxim Konovalov.Xc 263d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object. 264d378717eSMaxim Konovalov.It Xo 265d378717eSMaxim Konovalov.Ft int 266d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol" 267d378717eSMaxim Konovalov.Xc 268d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object. 269d378717eSMaxim Konovalov.It Xo 270d378717eSMaxim Konovalov.Ft int 271d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" 272d378717eSMaxim Konovalov.Xc 273d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created. 274d378717eSMaxim Konovalov.It Xo 275d378717eSMaxim Konovalov.Ft int 276d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex" 277d0353b83SRuslan Ermilov.Xc 2780f7d6847SJulian ElischerDestroy a mutex. 279d0353b83SRuslan Ermilov.It Xo 280d0353b83SRuslan Ermilov.Ft int 2818e750fa2SRuslan Ermilov.Fo pthread_mutex_init 2828e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr" 2838e750fa2SRuslan Ermilov.Fc 284d0353b83SRuslan Ermilov.Xc 285dfb9495bSTim VanderhoekInitialize a mutex with specified attributes. 286d0353b83SRuslan Ermilov.It Xo 287d0353b83SRuslan Ermilov.Ft int 288d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex" 289d0353b83SRuslan Ermilov.Xc 2900f7d6847SJulian ElischerLock a mutex and block until it becomes available. 291d0353b83SRuslan Ermilov.It Xo 292d0353b83SRuslan Ermilov.Ft int 2938e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock 2948e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime" 2958e750fa2SRuslan Ermilov.Fc 2962aa9de1fSMike Makonnen.Xc 2972aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires. 2982aa9de1fSMike Makonnen.It Xo 2992aa9de1fSMike Makonnen.Ft int 300d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex" 301d0353b83SRuslan Ermilov.Xc 3020227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread, 3030f7d6847SJulian Elischerincluding the current thread. 304d0353b83SRuslan Ermilov.It Xo 305d0353b83SRuslan Ermilov.Ft int 306d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex" 307d0353b83SRuslan Ermilov.Xc 3080f7d6847SJulian ElischerUnlock a mutex. 3090f7d6847SJulian Elischer.El 3108e750fa2SRuslan Ermilov.Ss Condition Variable Routines 3118e750fa2SRuslan Ermilov.Bl -tag -width indent 312d0353b83SRuslan Ermilov.It Xo 313d0353b83SRuslan Ermilov.Ft int 314d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr" 315d0353b83SRuslan Ermilov.Xc 3160f7d6847SJulian ElischerDestroy a condition variable attributes object. 317d0353b83SRuslan Ermilov.It Xo 318d0353b83SRuslan Ermilov.Ft int 319d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr" 320d378717eSMaxim Konovalov.Xc 321d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values. 322d378717eSMaxim Konovalov.It Xo 323d378717eSMaxim Konovalov.Ft int 324d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond" 325d0353b83SRuslan Ermilov.Xc 3260f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable. 327d0353b83SRuslan Ermilov.It Xo 328d0353b83SRuslan Ermilov.Ft int 329d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond" 330d0353b83SRuslan Ermilov.Xc 3310f7d6847SJulian ElischerDestroy a condition variable. 332d0353b83SRuslan Ermilov.It Xo 333d0353b83SRuslan Ermilov.Ft int 334d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr" 335d0353b83SRuslan Ermilov.Xc 3360f7d6847SJulian ElischerInitialize a condition variable with specified attributes. 337d0353b83SRuslan Ermilov.It Xo 338d0353b83SRuslan Ermilov.Ft int 339d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond" 340d0353b83SRuslan Ermilov.Xc 3410f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable. 342d0353b83SRuslan Ermilov.It Xo 343d0353b83SRuslan Ermilov.Ft int 3448e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait 3458e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex" 3468e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime" 3478e750fa2SRuslan Ermilov.Fc 348d0353b83SRuslan Ermilov.Xc 34909e90f51SGavin AtkinsonUnlock the specified mutex, wait no longer than the specified time for 35009e90f51SGavin Atkinsona condition, and then relock the mutex. 351d0353b83SRuslan Ermilov.It Xo 352d0353b83SRuslan Ermilov.Ft int 353d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex" 354d0353b83SRuslan Ermilov.Xc 35509e90f51SGavin AtkinsonUnlock the specified mutex, wait for a condition, and relock the mutex. 3560f7d6847SJulian Elischer.El 3578e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines 3588e750fa2SRuslan Ermilov.Bl -tag -width indent 359d0353b83SRuslan Ermilov.It Xo 360d0353b83SRuslan Ermilov.Ft int 361d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock" 362d0353b83SRuslan Ermilov.Xc 363d4a76febSAlexander LangerDestroy a read/write lock object. 364d0353b83SRuslan Ermilov.It Xo 365d0353b83SRuslan Ermilov.Ft int 3668e750fa2SRuslan Ermilov.Fo pthread_rwlock_init 3678e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr" 3688e750fa2SRuslan Ermilov.Fc 369d0353b83SRuslan Ermilov.Xc 370d4a76febSAlexander LangerInitialize a read/write lock object. 371d0353b83SRuslan Ermilov.It Xo 372d0353b83SRuslan Ermilov.Ft int 373d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" 374d0353b83SRuslan Ermilov.Xc 375d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be 376d4a76febSAlexander Langeracquired. 377d0353b83SRuslan Ermilov.It Xo 378d0353b83SRuslan Ermilov.Ft int 379d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" 380d0353b83SRuslan Ermilov.Xc 381d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the 382d4a76febSAlexander Langerlock is unavailable. 383d0353b83SRuslan Ermilov.It Xo 384d0353b83SRuslan Ermilov.Ft int 385d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock" 386d0353b83SRuslan Ermilov.Xc 387d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the 388d4a76febSAlexander Langerlock is unavailable. 389d0353b83SRuslan Ermilov.It Xo 390d0353b83SRuslan Ermilov.Ft int 391d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock" 392d0353b83SRuslan Ermilov.Xc 393d4a76febSAlexander LangerUnlock a read/write lock. 394d0353b83SRuslan Ermilov.It Xo 395d0353b83SRuslan Ermilov.Ft int 396d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock" 397d0353b83SRuslan Ermilov.Xc 398d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be 399d4a76febSAlexander Langeracquired. 400d0353b83SRuslan Ermilov.It Xo 401d0353b83SRuslan Ermilov.Ft int 402d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" 403d0353b83SRuslan Ermilov.Xc 404d4a76febSAlexander LangerDestroy a read/write lock attribute object. 405d0353b83SRuslan Ermilov.It Xo 406d0353b83SRuslan Ermilov.Ft int 4078e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared 4088e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared" 4098e750fa2SRuslan Ermilov.Fc 410d0353b83SRuslan Ermilov.Xc 411d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute 412d4a76febSAlexander Langerobject. 413d0353b83SRuslan Ermilov.It Xo 414d0353b83SRuslan Ermilov.Ft int 415d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" 416d0353b83SRuslan Ermilov.Xc 417d4a76febSAlexander LangerInitialize a read/write lock attribute object. 418d0353b83SRuslan Ermilov.It Xo 419d0353b83SRuslan Ermilov.Ft int 420c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" 421d0353b83SRuslan Ermilov.Xc 422d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object. 423d4a76febSAlexander Langer.El 4248e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines 4258e750fa2SRuslan Ermilov.Bl -tag -width indent 426d0353b83SRuslan Ermilov.It Xo 427d0353b83SRuslan Ermilov.Ft int 4288e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" 429d0353b83SRuslan Ermilov.Xc 4300f7d6847SJulian ElischerCreate a thread-specific data key. 431d0353b83SRuslan Ermilov.It Xo 432d0353b83SRuslan Ermilov.Ft int 433d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key" 434d0353b83SRuslan Ermilov.Xc 4350f7d6847SJulian ElischerDelete a thread-specific data key. 436d0353b83SRuslan Ermilov.It Xo 437d0353b83SRuslan Ermilov.Ft "void *" 438c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key" 439d0353b83SRuslan Ermilov.Xc 4400f7d6847SJulian ElischerGet the thread-specific value for the specified key. 441d0353b83SRuslan Ermilov.It Xo 442d0353b83SRuslan Ermilov.Ft int 443d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr" 444d0353b83SRuslan Ermilov.Xc 4450f7d6847SJulian ElischerSet the thread-specific value for the specified key. 4460f7d6847SJulian Elischer.El 4478e750fa2SRuslan Ermilov.Ss Cleanup Routines 4488e750fa2SRuslan Ermilov.Bl -tag -width indent 449d0353b83SRuslan Ermilov.It Xo 450a3c8fc53SGiorgos Keramidas.Ft int 451a3c8fc53SGiorgos Keramidas.Fo pthread_atfork 452a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]" 453a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]" 454a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]" 455a3c8fc53SGiorgos Keramidas.Fc 456a3c8fc53SGiorgos Keramidas.Xc 457a3fb6da9SGlen BarberRegister fork handlers. 458a3c8fc53SGiorgos Keramidas.It Xo 459d0353b83SRuslan Ermilov.Ft void 460d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute" 461d0353b83SRuslan Ermilov.Xc 4620f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup 4630f7d6847SJulian Elischerstack and optionally invoke it. 464d0353b83SRuslan Ermilov.It Xo 465d0353b83SRuslan Ermilov.Ft void 4668e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg" 467d0353b83SRuslan Ermilov.Xc 4680f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's 4690f7d6847SJulian Elischercancellation stack. 4700f7d6847SJulian Elischer.El 4713e9ed1efSRuslan Ermilov.Sh IMPLEMENTATION NOTES 472b5c508fbSRuslan ErmilovThe current 473b5c508fbSRuslan Ermilov.Fx 4749c0f9817STom RhodesPOSIX thread implementation is built into the 4757ba7e041STom Rhodes.Lb libthr 4769c0f9817STom Rhodeslibrary. 4779c0f9817STom RhodesIt contains thread-safe versions of 478c133f2abSRuslan Ermilov.Lb libc 479c133f2abSRuslan Ermilovfunctions and the thread functions. 4809c0f9817STom RhodesThreaded applications are linked with this library. 481997d90beSBill Swingle.Sh SEE ALSO 4829c0f9817STom Rhodes.Xr libthr 3 , 483a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 , 484777f8cebSXin LI.Xr pthread_attr 3 , 485c3f5198bSOlivier Houchard.Xr pthread_cancel 3 , 4865521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 , 4875521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 , 488997d90beSBill Swingle.Xr pthread_cond_broadcast 3 , 489997d90beSBill Swingle.Xr pthread_cond_destroy 3 , 490997d90beSBill Swingle.Xr pthread_cond_init 3 , 491997d90beSBill Swingle.Xr pthread_cond_signal 3 , 492997d90beSBill Swingle.Xr pthread_cond_timedwait 3 , 493997d90beSBill Swingle.Xr pthread_cond_wait 3 , 494e52a1af2SBaptiste Daroussin.Xr pthread_condattr_destroy 3 , 495e52a1af2SBaptiste Daroussin.Xr pthread_condattr_init 3 , 4965521ff5aSRuslan Ermilov.Xr pthread_create 3 , 4975521ff5aSRuslan Ermilov.Xr pthread_detach 3 , 4985521ff5aSRuslan Ermilov.Xr pthread_equal 3 , 4995521ff5aSRuslan Ermilov.Xr pthread_exit 3 , 5005521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 , 5015521ff5aSRuslan Ermilov.Xr pthread_join 3 , 5025521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 , 503d378717eSMaxim Konovalov.Xr pthread_kill 3 , 504e52a1af2SBaptiste Daroussin.Xr pthread_mutex_destroy 3 , 505e52a1af2SBaptiste Daroussin.Xr pthread_mutex_init 3 , 506e52a1af2SBaptiste Daroussin.Xr pthread_mutex_lock 3 , 507e52a1af2SBaptiste Daroussin.Xr pthread_mutex_trylock 3 , 508e52a1af2SBaptiste Daroussin.Xr pthread_mutex_unlock 3 , 509d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 , 510d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 , 511d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 , 512d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 , 513d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 , 514d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 , 515d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 , 516d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 , 517*df7d7638SFelix Johnson.Xr pthread_np 3 , 5185521ff5aSRuslan Ermilov.Xr pthread_once 3 , 519997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 , 520997d90beSBill Swingle.Xr pthread_rwlock_init 3 , 521997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 , 522997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 , 523997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 , 524e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_destroy 3 , 525e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_getpshared 3 , 526e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_init 3 , 527e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_setpshared 3 , 5285521ff5aSRuslan Ermilov.Xr pthread_self 3 , 529d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 , 530d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 , 531d378717eSMaxim Konovalov.Xr pthread_setspecific 3 , 532d378717eSMaxim Konovalov.Xr pthread_testcancel 3 5330f7d6847SJulian Elischer.Sh STANDARDS 534c133f2abSRuslan ErmilovThe functions with the 535c133f2abSRuslan Ermilov.Nm pthread_ 536efc0456fSAlexander Langerprefix and not 537c133f2abSRuslan Ermilov.Nm _np 538d4a76febSAlexander Langersuffix or 539c133f2abSRuslan Ermilov.Nm pthread_rwlock 5403c233756SRuslan Ermilovprefix conform to 5413c233756SRuslan Ermilov.St -p1003.1-96 . 5420f7d6847SJulian Elischer.Pp 543c133f2abSRuslan ErmilovThe functions with the 544c133f2abSRuslan Ermilov.Nm pthread_ 5450f7d6847SJulian Elischerprefix and 546c133f2abSRuslan Ermilov.Nm _np 5470f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads. 548d4a76febSAlexander Langer.Pp 549c133f2abSRuslan ErmilovThe functions with the 550c133f2abSRuslan Ermilov.Nm pthread_rwlock 5513c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the 5523c233756SRuslan Ermilov.St -susv2 . 553