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.\" 317f3dea24SPeter Wemm.\" $FreeBSD$ 32ac5afce1SJohn-Mark Gurney.\" 33*df7d7638SFelix Johnson.Dd October 12, 2021 340f7d6847SJulian Elischer.Dt PTHREAD 3 353d45e180SRuslan Ermilov.Os 360f7d6847SJulian Elischer.Sh NAME 370f7d6847SJulian Elischer.Nm pthread 380f7d6847SJulian Elischer.Nd POSIX thread functions 395b8ef52dSSimon L. B. Nielsen.Sh LIBRARY 405b8ef52dSSimon L. B. Nielsen.Lb libpthread 41c70db3ffSBruce Evans.Sh SYNOPSIS 4232eef9aeSRuslan Ermilov.In pthread.h 430f7d6847SJulian Elischer.Sh DESCRIPTION 440f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with 450f7d6847SJulian Elischerrequirements for multiple flows of control, called 468e750fa2SRuslan Ermilov.Em threads , 476d249eeeSSheldon Hearnwithin a process. 486d249eeeSSheldon HearnMultithreading is used to improve the performance of a 490f7d6847SJulian Elischerprogram. 500f7d6847SJulian Elischer.Pp 510f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following 520f7d6847SJulian Elischergroups: 538e750fa2SRuslan Ermilov.Pp 548e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact 550f7d6847SJulian Elischer.It 56d4a76febSAlexander LangerThread Routines 570f7d6847SJulian Elischer.It 580f7d6847SJulian ElischerAttribute Object Routines 590f7d6847SJulian Elischer.It 600f7d6847SJulian ElischerMutex Routines 610f7d6847SJulian Elischer.It 620f7d6847SJulian ElischerCondition Variable Routines 630f7d6847SJulian Elischer.It 64d4a76febSAlexander LangerRead/Write Lock Routines 65d4a76febSAlexander Langer.It 660f7d6847SJulian ElischerPer-Thread Context Routines 670f7d6847SJulian Elischer.It 680f7d6847SJulian ElischerCleanup Routines 690f7d6847SJulian Elischer.El 70*df7d7638SFelix Johnson.Pp 71*df7d7638SFelix Johnson.Fx 72*df7d7638SFelix Johnsonextensions to the POSIX thread functions are summarized in 73*df7d7638SFelix Johnson.Xr pthread_np 3 . 748e750fa2SRuslan Ermilov.Ss Thread Routines 758e750fa2SRuslan Ermilov.Bl -tag -width indent 76d0353b83SRuslan Ermilov.It Xo 77d0353b83SRuslan Ermilov.Ft int 788e750fa2SRuslan Ermilov.Fo pthread_create 798e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr" 808e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg" 818e750fa2SRuslan Ermilov.Fc 82d0353b83SRuslan Ermilov.Xc 830f7d6847SJulian ElischerCreates a new thread of execution. 84d0353b83SRuslan Ermilov.It Xo 85d0353b83SRuslan Ermilov.Ft int 86d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread" 87d378717eSMaxim Konovalov.Xc 88d378717eSMaxim KonovalovCancels execution of a thread. 89d378717eSMaxim Konovalov.It Xo 90d378717eSMaxim Konovalov.Ft int 91d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread" 92d0353b83SRuslan Ermilov.Xc 930f7d6847SJulian ElischerMarks a thread for deletion. 94d0353b83SRuslan Ermilov.It Xo 95d0353b83SRuslan Ermilov.Ft int 96d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2" 97d0353b83SRuslan Ermilov.Xc 980f7d6847SJulian ElischerCompares two thread IDs. 99d0353b83SRuslan Ermilov.It Xo 100d0353b83SRuslan Ermilov.Ft void 101d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr" 102d0353b83SRuslan Ermilov.Xc 1030f7d6847SJulian ElischerTerminates the calling thread. 104d0353b83SRuslan Ermilov.It Xo 105d0353b83SRuslan Ermilov.Ft int 106d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr" 107d0353b83SRuslan Ermilov.Xc 1080f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread. 109d0353b83SRuslan Ermilov.It Xo 110d0353b83SRuslan Ermilov.Ft int 111d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig" 112d0353b83SRuslan Ermilov.Xc 113d378717eSMaxim KonovalovDelivers a signal to a specified thread. 114d0353b83SRuslan Ermilov.It Xo 115d0353b83SRuslan Ermilov.Ft int 1168e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]" 117d0353b83SRuslan Ermilov.Xc 1180f7d6847SJulian ElischerCalls an initialization routine once. 119d0353b83SRuslan Ermilov.It Xo 120d0353b83SRuslan Ermilov.Ft pthread_t 121d0353b83SRuslan Ermilov.Fn pthread_self void 122d0353b83SRuslan Ermilov.Xc 1230f7d6847SJulian ElischerReturns the thread ID of the calling thread. 124d378717eSMaxim Konovalov.It Xo 125d378717eSMaxim Konovalov.Ft int 126d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate" 127d378717eSMaxim Konovalov.Xc 128d378717eSMaxim KonovalovSets the current thread's cancelability state. 129d378717eSMaxim Konovalov.It Xo 130d378717eSMaxim Konovalov.Ft int 131d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype" 132d378717eSMaxim Konovalov.Xc 133d378717eSMaxim KonovalovSets the current thread's cancelability type. 134d378717eSMaxim Konovalov.It Xo 135d378717eSMaxim Konovalov.Ft void 136d378717eSMaxim Konovalov.Fn pthread_testcancel void 137d378717eSMaxim Konovalov.Xc 138d378717eSMaxim KonovalovCreates a cancellation point in the calling thread. 139d378717eSMaxim Konovalov.It Xo 140d378717eSMaxim Konovalov.Ft void 141d378717eSMaxim Konovalov.Fn pthread_yield void 142d378717eSMaxim Konovalov.Xc 143d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one. 1440f7d6847SJulian Elischer.El 1458e750fa2SRuslan Ermilov.Ss Attribute Object Routines 1468e750fa2SRuslan Ermilov.Bl -tag -width indent 147d0353b83SRuslan Ermilov.It Xo 148d0353b83SRuslan Ermilov.Ft int 149d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr" 150d0353b83SRuslan Ermilov.Xc 1510f7d6847SJulian ElischerDestroy a thread attributes object. 152d0353b83SRuslan Ermilov.It Xo 153d0353b83SRuslan Ermilov.Ft int 1548e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched 1558e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched" 1568e750fa2SRuslan Ermilov.Fc 157d0353b83SRuslan Ermilov.Xc 1580f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object. 159d0353b83SRuslan Ermilov.It Xo 160d0353b83SRuslan Ermilov.Ft int 1618e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam 1628e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param" 1638e750fa2SRuslan Ermilov.Fc 164d0353b83SRuslan Ermilov.Xc 1650f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object. 166d0353b83SRuslan Ermilov.It Xo 167d0353b83SRuslan Ermilov.Ft int 168c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy" 169d0353b83SRuslan Ermilov.Xc 1700f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object. 171d0353b83SRuslan Ermilov.It Xo 172d0353b83SRuslan Ermilov.Ft int 173c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope" 174d0353b83SRuslan Ermilov.Xc 1750f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object. 176d0353b83SRuslan Ermilov.It Xo 177d0353b83SRuslan Ermilov.Ft int 178c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize" 179d0353b83SRuslan Ermilov.Xc 1800f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object. 181d0353b83SRuslan Ermilov.It Xo 182d0353b83SRuslan Ermilov.Ft int 183c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr" 184d0353b83SRuslan Ermilov.Xc 1850f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object. 186d0353b83SRuslan Ermilov.It Xo 187d0353b83SRuslan Ermilov.Ft int 188c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate" 189d0353b83SRuslan Ermilov.Xc 1900f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object. 191d0353b83SRuslan Ermilov.It Xo 192d0353b83SRuslan Ermilov.Ft int 193d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr" 194d0353b83SRuslan Ermilov.Xc 1950f7d6847SJulian ElischerInitialize a thread attributes object with default values. 196d0353b83SRuslan Ermilov.It Xo 197d0353b83SRuslan Ermilov.Ft int 198d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched" 199d0353b83SRuslan Ermilov.Xc 2000f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object. 201d0353b83SRuslan Ermilov.It Xo 202d0353b83SRuslan Ermilov.Ft int 2038e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam 2048e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param" 2058e750fa2SRuslan Ermilov.Fc 206d0353b83SRuslan Ermilov.Xc 2070f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object. 208d0353b83SRuslan Ermilov.It Xo 209d0353b83SRuslan Ermilov.Ft int 210d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy" 211d0353b83SRuslan Ermilov.Xc 2120f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object. 213d0353b83SRuslan Ermilov.It Xo 214d0353b83SRuslan Ermilov.Ft int 215d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope" 216d0353b83SRuslan Ermilov.Xc 2170f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object. 218d0353b83SRuslan Ermilov.It Xo 219d0353b83SRuslan Ermilov.Ft int 220d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize" 221d0353b83SRuslan Ermilov.Xc 2220f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object. 223d0353b83SRuslan Ermilov.It Xo 224d0353b83SRuslan Ermilov.Ft int 225d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr" 226d0353b83SRuslan Ermilov.Xc 2270f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object. 228d0353b83SRuslan Ermilov.It Xo 229d0353b83SRuslan Ermilov.Ft int 230d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate" 231d0353b83SRuslan Ermilov.Xc 2320f7d6847SJulian ElischerSet the detach state in a thread attributes object. 2330f7d6847SJulian Elischer.El 2348e750fa2SRuslan Ermilov.Ss Mutex Routines 2358e750fa2SRuslan Ermilov.Bl -tag -width indent 236d0353b83SRuslan Ermilov.It Xo 237d0353b83SRuslan Ermilov.Ft int 238d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" 239d0353b83SRuslan Ermilov.Xc 2400f7d6847SJulian ElischerDestroy a mutex attributes object. 241d0353b83SRuslan Ermilov.It Xo 242d0353b83SRuslan Ermilov.Ft int 243b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprioceiling "const pthread_mutexattr_t *restrict attr" "int *restrict ceiling" 244d378717eSMaxim Konovalov.Xc 245d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object. 246d378717eSMaxim Konovalov.It Xo 247d378717eSMaxim Konovalov.Ft int 248b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprotocol "const pthread_mutexattr_t *restrict attr" "int *restrict protocol" 249d378717eSMaxim Konovalov.Xc 250d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object. 251d378717eSMaxim Konovalov.It Xo 252d378717eSMaxim Konovalov.Ft int 253b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_gettype "const pthread_mutexattr_t *restrict attr" "int *restrict type" 254d378717eSMaxim Konovalov.Xc 255d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object. 256d378717eSMaxim Konovalov.It Xo 257d378717eSMaxim Konovalov.Ft int 258d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" 259d0353b83SRuslan Ermilov.Xc 2600f7d6847SJulian ElischerInitialize a mutex attributes object with default values. 261d0353b83SRuslan Ermilov.It Xo 262d0353b83SRuslan Ermilov.Ft int 263d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling" 264d378717eSMaxim Konovalov.Xc 265d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object. 266d378717eSMaxim Konovalov.It Xo 267d378717eSMaxim Konovalov.Ft int 268d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol" 269d378717eSMaxim Konovalov.Xc 270d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object. 271d378717eSMaxim Konovalov.It Xo 272d378717eSMaxim Konovalov.Ft int 273d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" 274d378717eSMaxim Konovalov.Xc 275d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created. 276d378717eSMaxim Konovalov.It Xo 277d378717eSMaxim Konovalov.Ft int 278d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex" 279d0353b83SRuslan Ermilov.Xc 2800f7d6847SJulian ElischerDestroy a mutex. 281d0353b83SRuslan Ermilov.It Xo 282d0353b83SRuslan Ermilov.Ft int 2838e750fa2SRuslan Ermilov.Fo pthread_mutex_init 2848e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr" 2858e750fa2SRuslan Ermilov.Fc 286d0353b83SRuslan Ermilov.Xc 287dfb9495bSTim VanderhoekInitialize a mutex with specified attributes. 288d0353b83SRuslan Ermilov.It Xo 289d0353b83SRuslan Ermilov.Ft int 290d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex" 291d0353b83SRuslan Ermilov.Xc 2920f7d6847SJulian ElischerLock a mutex and block until it becomes available. 293d0353b83SRuslan Ermilov.It Xo 294d0353b83SRuslan Ermilov.Ft int 2958e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock 2968e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime" 2978e750fa2SRuslan Ermilov.Fc 2982aa9de1fSMike Makonnen.Xc 2992aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires. 3002aa9de1fSMike Makonnen.It Xo 3012aa9de1fSMike Makonnen.Ft int 302d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex" 303d0353b83SRuslan Ermilov.Xc 3040227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread, 3050f7d6847SJulian Elischerincluding the current thread. 306d0353b83SRuslan Ermilov.It Xo 307d0353b83SRuslan Ermilov.Ft int 308d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex" 309d0353b83SRuslan Ermilov.Xc 3100f7d6847SJulian ElischerUnlock a mutex. 3110f7d6847SJulian Elischer.El 3128e750fa2SRuslan Ermilov.Ss Condition Variable Routines 3138e750fa2SRuslan Ermilov.Bl -tag -width indent 314d0353b83SRuslan Ermilov.It Xo 315d0353b83SRuslan Ermilov.Ft int 316d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr" 317d0353b83SRuslan Ermilov.Xc 3180f7d6847SJulian ElischerDestroy a condition variable attributes object. 319d0353b83SRuslan Ermilov.It Xo 320d0353b83SRuslan Ermilov.Ft int 321d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr" 322d378717eSMaxim Konovalov.Xc 323d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values. 324d378717eSMaxim Konovalov.It Xo 325d378717eSMaxim Konovalov.Ft int 326d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond" 327d0353b83SRuslan Ermilov.Xc 3280f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable. 329d0353b83SRuslan Ermilov.It Xo 330d0353b83SRuslan Ermilov.Ft int 331d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond" 332d0353b83SRuslan Ermilov.Xc 3330f7d6847SJulian ElischerDestroy a condition variable. 334d0353b83SRuslan Ermilov.It Xo 335d0353b83SRuslan Ermilov.Ft int 336d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr" 337d0353b83SRuslan Ermilov.Xc 3380f7d6847SJulian ElischerInitialize a condition variable with specified attributes. 339d0353b83SRuslan Ermilov.It Xo 340d0353b83SRuslan Ermilov.Ft int 341d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond" 342d0353b83SRuslan Ermilov.Xc 3430f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable. 344d0353b83SRuslan Ermilov.It Xo 345d0353b83SRuslan Ermilov.Ft int 3468e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait 3478e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex" 3488e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime" 3498e750fa2SRuslan Ermilov.Fc 350d0353b83SRuslan Ermilov.Xc 35109e90f51SGavin AtkinsonUnlock the specified mutex, wait no longer than the specified time for 35209e90f51SGavin Atkinsona condition, and then relock the mutex. 353d0353b83SRuslan Ermilov.It Xo 354d0353b83SRuslan Ermilov.Ft int 355d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex" 356d0353b83SRuslan Ermilov.Xc 35709e90f51SGavin AtkinsonUnlock the specified mutex, wait for a condition, and relock the mutex. 3580f7d6847SJulian Elischer.El 3598e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines 3608e750fa2SRuslan Ermilov.Bl -tag -width indent 361d0353b83SRuslan Ermilov.It Xo 362d0353b83SRuslan Ermilov.Ft int 363d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock" 364d0353b83SRuslan Ermilov.Xc 365d4a76febSAlexander LangerDestroy a read/write lock object. 366d0353b83SRuslan Ermilov.It Xo 367d0353b83SRuslan Ermilov.Ft int 3688e750fa2SRuslan Ermilov.Fo pthread_rwlock_init 3698e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr" 3708e750fa2SRuslan Ermilov.Fc 371d0353b83SRuslan Ermilov.Xc 372d4a76febSAlexander LangerInitialize a read/write lock object. 373d0353b83SRuslan Ermilov.It Xo 374d0353b83SRuslan Ermilov.Ft int 375d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" 376d0353b83SRuslan Ermilov.Xc 377d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be 378d4a76febSAlexander Langeracquired. 379d0353b83SRuslan Ermilov.It Xo 380d0353b83SRuslan Ermilov.Ft int 381d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" 382d0353b83SRuslan Ermilov.Xc 383d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the 384d4a76febSAlexander Langerlock is unavailable. 385d0353b83SRuslan Ermilov.It Xo 386d0353b83SRuslan Ermilov.Ft int 387d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock" 388d0353b83SRuslan Ermilov.Xc 389d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the 390d4a76febSAlexander Langerlock is unavailable. 391d0353b83SRuslan Ermilov.It Xo 392d0353b83SRuslan Ermilov.Ft int 393d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock" 394d0353b83SRuslan Ermilov.Xc 395d4a76febSAlexander LangerUnlock a read/write lock. 396d0353b83SRuslan Ermilov.It Xo 397d0353b83SRuslan Ermilov.Ft int 398d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock" 399d0353b83SRuslan Ermilov.Xc 400d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be 401d4a76febSAlexander Langeracquired. 402d0353b83SRuslan Ermilov.It Xo 403d0353b83SRuslan Ermilov.Ft int 404d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" 405d0353b83SRuslan Ermilov.Xc 406d4a76febSAlexander LangerDestroy a read/write lock attribute object. 407d0353b83SRuslan Ermilov.It Xo 408d0353b83SRuslan Ermilov.Ft int 4098e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared 4108e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared" 4118e750fa2SRuslan Ermilov.Fc 412d0353b83SRuslan Ermilov.Xc 413d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute 414d4a76febSAlexander Langerobject. 415d0353b83SRuslan Ermilov.It Xo 416d0353b83SRuslan Ermilov.Ft int 417d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" 418d0353b83SRuslan Ermilov.Xc 419d4a76febSAlexander LangerInitialize a read/write lock attribute object. 420d0353b83SRuslan Ermilov.It Xo 421d0353b83SRuslan Ermilov.Ft int 422c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" 423d0353b83SRuslan Ermilov.Xc 424d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object. 425d4a76febSAlexander Langer.El 4268e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines 4278e750fa2SRuslan Ermilov.Bl -tag -width indent 428d0353b83SRuslan Ermilov.It Xo 429d0353b83SRuslan Ermilov.Ft int 4308e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" 431d0353b83SRuslan Ermilov.Xc 4320f7d6847SJulian ElischerCreate a thread-specific data key. 433d0353b83SRuslan Ermilov.It Xo 434d0353b83SRuslan Ermilov.Ft int 435d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key" 436d0353b83SRuslan Ermilov.Xc 4370f7d6847SJulian ElischerDelete a thread-specific data key. 438d0353b83SRuslan Ermilov.It Xo 439d0353b83SRuslan Ermilov.Ft "void *" 440c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key" 441d0353b83SRuslan Ermilov.Xc 4420f7d6847SJulian ElischerGet the thread-specific value for the specified key. 443d0353b83SRuslan Ermilov.It Xo 444d0353b83SRuslan Ermilov.Ft int 445d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr" 446d0353b83SRuslan Ermilov.Xc 4470f7d6847SJulian ElischerSet the thread-specific value for the specified key. 4480f7d6847SJulian Elischer.El 4498e750fa2SRuslan Ermilov.Ss Cleanup Routines 4508e750fa2SRuslan Ermilov.Bl -tag -width indent 451d0353b83SRuslan Ermilov.It Xo 452a3c8fc53SGiorgos Keramidas.Ft int 453a3c8fc53SGiorgos Keramidas.Fo pthread_atfork 454a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]" 455a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]" 456a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]" 457a3c8fc53SGiorgos Keramidas.Fc 458a3c8fc53SGiorgos Keramidas.Xc 459a3fb6da9SGlen BarberRegister fork handlers. 460a3c8fc53SGiorgos Keramidas.It Xo 461d0353b83SRuslan Ermilov.Ft void 462d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute" 463d0353b83SRuslan Ermilov.Xc 4640f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup 4650f7d6847SJulian Elischerstack and optionally invoke it. 466d0353b83SRuslan Ermilov.It Xo 467d0353b83SRuslan Ermilov.Ft void 4688e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg" 469d0353b83SRuslan Ermilov.Xc 4700f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's 4710f7d6847SJulian Elischercancellation stack. 4720f7d6847SJulian Elischer.El 4733e9ed1efSRuslan Ermilov.Sh IMPLEMENTATION NOTES 474b5c508fbSRuslan ErmilovThe current 475b5c508fbSRuslan Ermilov.Fx 4769c0f9817STom RhodesPOSIX thread implementation is built into the 4777ba7e041STom Rhodes.Lb libthr 4789c0f9817STom Rhodeslibrary. 4799c0f9817STom RhodesIt contains thread-safe versions of 480c133f2abSRuslan Ermilov.Lb libc 481c133f2abSRuslan Ermilovfunctions and the thread functions. 4829c0f9817STom RhodesThreaded applications are linked with this library. 483997d90beSBill Swingle.Sh SEE ALSO 4849c0f9817STom Rhodes.Xr libthr 3 , 485a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 , 486777f8cebSXin LI.Xr pthread_attr 3 , 487c3f5198bSOlivier Houchard.Xr pthread_cancel 3 , 4885521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 , 4895521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 , 490997d90beSBill Swingle.Xr pthread_cond_broadcast 3 , 491997d90beSBill Swingle.Xr pthread_cond_destroy 3 , 492997d90beSBill Swingle.Xr pthread_cond_init 3 , 493997d90beSBill Swingle.Xr pthread_cond_signal 3 , 494997d90beSBill Swingle.Xr pthread_cond_timedwait 3 , 495997d90beSBill Swingle.Xr pthread_cond_wait 3 , 496e52a1af2SBaptiste Daroussin.Xr pthread_condattr_destroy 3 , 497e52a1af2SBaptiste Daroussin.Xr pthread_condattr_init 3 , 4985521ff5aSRuslan Ermilov.Xr pthread_create 3 , 4995521ff5aSRuslan Ermilov.Xr pthread_detach 3 , 5005521ff5aSRuslan Ermilov.Xr pthread_equal 3 , 5015521ff5aSRuslan Ermilov.Xr pthread_exit 3 , 5025521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 , 5035521ff5aSRuslan Ermilov.Xr pthread_join 3 , 5045521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 , 505d378717eSMaxim Konovalov.Xr pthread_kill 3 , 506e52a1af2SBaptiste Daroussin.Xr pthread_mutex_destroy 3 , 507e52a1af2SBaptiste Daroussin.Xr pthread_mutex_init 3 , 508e52a1af2SBaptiste Daroussin.Xr pthread_mutex_lock 3 , 509e52a1af2SBaptiste Daroussin.Xr pthread_mutex_trylock 3 , 510e52a1af2SBaptiste Daroussin.Xr pthread_mutex_unlock 3 , 511d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 , 512d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 , 513d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 , 514d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 , 515d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 , 516d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 , 517d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 , 518d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 , 519*df7d7638SFelix Johnson.Xr pthread_np 3 , 5205521ff5aSRuslan Ermilov.Xr pthread_once 3 , 521997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 , 522997d90beSBill Swingle.Xr pthread_rwlock_init 3 , 523997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 , 524997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 , 525997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 , 526e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_destroy 3 , 527e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_getpshared 3 , 528e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_init 3 , 529e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_setpshared 3 , 5305521ff5aSRuslan Ermilov.Xr pthread_self 3 , 531d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 , 532d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 , 533d378717eSMaxim Konovalov.Xr pthread_setspecific 3 , 534d378717eSMaxim Konovalov.Xr pthread_testcancel 3 5350f7d6847SJulian Elischer.Sh STANDARDS 536c133f2abSRuslan ErmilovThe functions with the 537c133f2abSRuslan Ermilov.Nm pthread_ 538efc0456fSAlexander Langerprefix and not 539c133f2abSRuslan Ermilov.Nm _np 540d4a76febSAlexander Langersuffix or 541c133f2abSRuslan Ermilov.Nm pthread_rwlock 5423c233756SRuslan Ermilovprefix conform to 5433c233756SRuslan Ermilov.St -p1003.1-96 . 5440f7d6847SJulian Elischer.Pp 545c133f2abSRuslan ErmilovThe functions with the 546c133f2abSRuslan Ermilov.Nm pthread_ 5470f7d6847SJulian Elischerprefix and 548c133f2abSRuslan Ermilov.Nm _np 5490f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads. 550d4a76febSAlexander Langer.Pp 551c133f2abSRuslan ErmilovThe functions with the 552c133f2abSRuslan Ermilov.Nm pthread_rwlock 5533c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the 5543c233756SRuslan Ermilov.St -susv2 . 555