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*09e90f51SGavin Atkinson.Dd August 12, 2014 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 708e750fa2SRuslan Ermilov.Ss Thread Routines 718e750fa2SRuslan Ermilov.Bl -tag -width indent 72d0353b83SRuslan Ermilov.It Xo 73d0353b83SRuslan Ermilov.Ft int 748e750fa2SRuslan Ermilov.Fo pthread_create 758e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr" 768e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg" 778e750fa2SRuslan Ermilov.Fc 78d0353b83SRuslan Ermilov.Xc 790f7d6847SJulian ElischerCreates a new thread of execution. 80d0353b83SRuslan Ermilov.It Xo 81d0353b83SRuslan Ermilov.Ft int 82d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread" 83d378717eSMaxim Konovalov.Xc 84d378717eSMaxim KonovalovCancels execution of a thread. 85d378717eSMaxim Konovalov.It Xo 86d378717eSMaxim Konovalov.Ft int 87d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread" 88d0353b83SRuslan Ermilov.Xc 890f7d6847SJulian ElischerMarks a thread for deletion. 90d0353b83SRuslan Ermilov.It Xo 91d0353b83SRuslan Ermilov.Ft int 92d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2" 93d0353b83SRuslan Ermilov.Xc 940f7d6847SJulian ElischerCompares two thread IDs. 95d0353b83SRuslan Ermilov.It Xo 96d0353b83SRuslan Ermilov.Ft void 97d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr" 98d0353b83SRuslan Ermilov.Xc 990f7d6847SJulian ElischerTerminates the calling thread. 100d0353b83SRuslan Ermilov.It Xo 101d0353b83SRuslan Ermilov.Ft int 102d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr" 103d0353b83SRuslan Ermilov.Xc 1040f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread. 105d0353b83SRuslan Ermilov.It Xo 106d0353b83SRuslan Ermilov.Ft int 107d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig" 108d0353b83SRuslan Ermilov.Xc 109d378717eSMaxim KonovalovDelivers a signal to a specified thread. 110d0353b83SRuslan Ermilov.It Xo 111d0353b83SRuslan Ermilov.Ft int 1128e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]" 113d0353b83SRuslan Ermilov.Xc 1140f7d6847SJulian ElischerCalls an initialization routine once. 115d0353b83SRuslan Ermilov.It Xo 116d0353b83SRuslan Ermilov.Ft pthread_t 117d0353b83SRuslan Ermilov.Fn pthread_self void 118d0353b83SRuslan Ermilov.Xc 1190f7d6847SJulian ElischerReturns the thread ID of the calling thread. 120d378717eSMaxim Konovalov.It Xo 121d378717eSMaxim Konovalov.Ft int 122d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate" 123d378717eSMaxim Konovalov.Xc 124d378717eSMaxim KonovalovSets the current thread's cancelability state. 125d378717eSMaxim Konovalov.It Xo 126d378717eSMaxim Konovalov.Ft int 127d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype" 128d378717eSMaxim Konovalov.Xc 129d378717eSMaxim KonovalovSets the current thread's cancelability type. 130d378717eSMaxim Konovalov.It Xo 131d378717eSMaxim Konovalov.Ft void 132d378717eSMaxim Konovalov.Fn pthread_testcancel void 133d378717eSMaxim Konovalov.Xc 134d378717eSMaxim KonovalovCreates a cancellation point in the calling thread. 135d378717eSMaxim Konovalov.It Xo 136d378717eSMaxim Konovalov.Ft void 137d378717eSMaxim Konovalov.Fn pthread_yield void 138d378717eSMaxim Konovalov.Xc 139d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one. 1400f7d6847SJulian Elischer.El 1418e750fa2SRuslan Ermilov.Ss Attribute Object Routines 1428e750fa2SRuslan Ermilov.Bl -tag -width indent 143d0353b83SRuslan Ermilov.It Xo 144d0353b83SRuslan Ermilov.Ft int 145d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr" 146d0353b83SRuslan Ermilov.Xc 1470f7d6847SJulian ElischerDestroy a thread attributes object. 148d0353b83SRuslan Ermilov.It Xo 149d0353b83SRuslan Ermilov.Ft int 1508e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched 1518e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched" 1528e750fa2SRuslan Ermilov.Fc 153d0353b83SRuslan Ermilov.Xc 1540f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object. 155d0353b83SRuslan Ermilov.It Xo 156d0353b83SRuslan Ermilov.Ft int 1578e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam 1588e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param" 1598e750fa2SRuslan Ermilov.Fc 160d0353b83SRuslan Ermilov.Xc 1610f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object. 162d0353b83SRuslan Ermilov.It Xo 163d0353b83SRuslan Ermilov.Ft int 164c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy" 165d0353b83SRuslan Ermilov.Xc 1660f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object. 167d0353b83SRuslan Ermilov.It Xo 168d0353b83SRuslan Ermilov.Ft int 169c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope" 170d0353b83SRuslan Ermilov.Xc 1710f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object. 172d0353b83SRuslan Ermilov.It Xo 173d0353b83SRuslan Ermilov.Ft int 174c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize" 175d0353b83SRuslan Ermilov.Xc 1760f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object. 177d0353b83SRuslan Ermilov.It Xo 178d0353b83SRuslan Ermilov.Ft int 179c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr" 180d0353b83SRuslan Ermilov.Xc 1810f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object. 182d0353b83SRuslan Ermilov.It Xo 183d0353b83SRuslan Ermilov.Ft int 184c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate" 185d0353b83SRuslan Ermilov.Xc 1860f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object. 187d0353b83SRuslan Ermilov.It Xo 188d0353b83SRuslan Ermilov.Ft int 189d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr" 190d0353b83SRuslan Ermilov.Xc 1910f7d6847SJulian ElischerInitialize a thread attributes object with default values. 192d0353b83SRuslan Ermilov.It Xo 193d0353b83SRuslan Ermilov.Ft int 194d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched" 195d0353b83SRuslan Ermilov.Xc 1960f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object. 197d0353b83SRuslan Ermilov.It Xo 198d0353b83SRuslan Ermilov.Ft int 1998e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam 2008e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param" 2018e750fa2SRuslan Ermilov.Fc 202d0353b83SRuslan Ermilov.Xc 2030f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object. 204d0353b83SRuslan Ermilov.It Xo 205d0353b83SRuslan Ermilov.Ft int 206d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy" 207d0353b83SRuslan Ermilov.Xc 2080f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object. 209d0353b83SRuslan Ermilov.It Xo 210d0353b83SRuslan Ermilov.Ft int 211d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope" 212d0353b83SRuslan Ermilov.Xc 2130f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object. 214d0353b83SRuslan Ermilov.It Xo 215d0353b83SRuslan Ermilov.Ft int 216d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize" 217d0353b83SRuslan Ermilov.Xc 2180f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object. 219d0353b83SRuslan Ermilov.It Xo 220d0353b83SRuslan Ermilov.Ft int 221d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr" 222d0353b83SRuslan Ermilov.Xc 2230f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object. 224d0353b83SRuslan Ermilov.It Xo 225d0353b83SRuslan Ermilov.Ft int 226d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate" 227d0353b83SRuslan Ermilov.Xc 2280f7d6847SJulian ElischerSet the detach state in a thread attributes object. 2290f7d6847SJulian Elischer.El 2308e750fa2SRuslan Ermilov.Ss Mutex Routines 2318e750fa2SRuslan Ermilov.Bl -tag -width indent 232d0353b83SRuslan Ermilov.It Xo 233d0353b83SRuslan Ermilov.Ft int 234d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" 235d0353b83SRuslan Ermilov.Xc 2360f7d6847SJulian ElischerDestroy a mutex attributes object. 237d0353b83SRuslan Ermilov.It Xo 238d0353b83SRuslan Ermilov.Ft int 239d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling" 240d378717eSMaxim Konovalov.Xc 241d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object. 242d378717eSMaxim Konovalov.It Xo 243d378717eSMaxim Konovalov.Ft int 244d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol" 245d378717eSMaxim Konovalov.Xc 246d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object. 247d378717eSMaxim Konovalov.It Xo 248d378717eSMaxim Konovalov.Ft int 249d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type" 250d378717eSMaxim Konovalov.Xc 251d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object. 252d378717eSMaxim Konovalov.It Xo 253d378717eSMaxim Konovalov.Ft int 254d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" 255d0353b83SRuslan Ermilov.Xc 2560f7d6847SJulian ElischerInitialize a mutex attributes object with default values. 257d0353b83SRuslan Ermilov.It Xo 258d0353b83SRuslan Ermilov.Ft int 259d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling" 260d378717eSMaxim Konovalov.Xc 261d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object. 262d378717eSMaxim Konovalov.It Xo 263d378717eSMaxim Konovalov.Ft int 264d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol" 265d378717eSMaxim Konovalov.Xc 266d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object. 267d378717eSMaxim Konovalov.It Xo 268d378717eSMaxim Konovalov.Ft int 269d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" 270d378717eSMaxim Konovalov.Xc 271d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created. 272d378717eSMaxim Konovalov.It Xo 273d378717eSMaxim Konovalov.Ft int 274d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex" 275d0353b83SRuslan Ermilov.Xc 2760f7d6847SJulian ElischerDestroy a mutex. 277d0353b83SRuslan Ermilov.It Xo 278d0353b83SRuslan Ermilov.Ft int 2798e750fa2SRuslan Ermilov.Fo pthread_mutex_init 2808e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr" 2818e750fa2SRuslan Ermilov.Fc 282d0353b83SRuslan Ermilov.Xc 283dfb9495bSTim VanderhoekInitialize a mutex with specified attributes. 284d0353b83SRuslan Ermilov.It Xo 285d0353b83SRuslan Ermilov.Ft int 286d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex" 287d0353b83SRuslan Ermilov.Xc 2880f7d6847SJulian ElischerLock a mutex and block until it becomes available. 289d0353b83SRuslan Ermilov.It Xo 290d0353b83SRuslan Ermilov.Ft int 2918e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock 2928e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime" 2938e750fa2SRuslan Ermilov.Fc 2942aa9de1fSMike Makonnen.Xc 2952aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires. 2962aa9de1fSMike Makonnen.It Xo 2972aa9de1fSMike Makonnen.Ft int 298d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex" 299d0353b83SRuslan Ermilov.Xc 3000227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread, 3010f7d6847SJulian Elischerincluding the current thread. 302d0353b83SRuslan Ermilov.It Xo 303d0353b83SRuslan Ermilov.Ft int 304d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex" 305d0353b83SRuslan Ermilov.Xc 3060f7d6847SJulian ElischerUnlock a mutex. 3070f7d6847SJulian Elischer.El 3088e750fa2SRuslan Ermilov.Ss Condition Variable Routines 3098e750fa2SRuslan Ermilov.Bl -tag -width indent 310d0353b83SRuslan Ermilov.It Xo 311d0353b83SRuslan Ermilov.Ft int 312d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr" 313d0353b83SRuslan Ermilov.Xc 3140f7d6847SJulian ElischerDestroy a condition variable attributes object. 315d0353b83SRuslan Ermilov.It Xo 316d0353b83SRuslan Ermilov.Ft int 317d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr" 318d378717eSMaxim Konovalov.Xc 319d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values. 320d378717eSMaxim Konovalov.It Xo 321d378717eSMaxim Konovalov.Ft int 322d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond" 323d0353b83SRuslan Ermilov.Xc 3240f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable. 325d0353b83SRuslan Ermilov.It Xo 326d0353b83SRuslan Ermilov.Ft int 327d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond" 328d0353b83SRuslan Ermilov.Xc 3290f7d6847SJulian ElischerDestroy a condition variable. 330d0353b83SRuslan Ermilov.It Xo 331d0353b83SRuslan Ermilov.Ft int 332d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr" 333d0353b83SRuslan Ermilov.Xc 3340f7d6847SJulian ElischerInitialize a condition variable with specified attributes. 335d0353b83SRuslan Ermilov.It Xo 336d0353b83SRuslan Ermilov.Ft int 337d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond" 338d0353b83SRuslan Ermilov.Xc 3390f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable. 340d0353b83SRuslan Ermilov.It Xo 341d0353b83SRuslan Ermilov.Ft int 3428e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait 3438e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex" 3448e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime" 3458e750fa2SRuslan Ermilov.Fc 346d0353b83SRuslan Ermilov.Xc 347*09e90f51SGavin AtkinsonUnlock the specified mutex, wait no longer than the specified time for 348*09e90f51SGavin Atkinsona condition, and then relock the mutex. 349d0353b83SRuslan Ermilov.It Xo 350d0353b83SRuslan Ermilov.Ft int 351d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex" 352d0353b83SRuslan Ermilov.Xc 353*09e90f51SGavin AtkinsonUnlock the specified mutex, wait for a condition, and relock the mutex. 3540f7d6847SJulian Elischer.El 3558e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines 3568e750fa2SRuslan Ermilov.Bl -tag -width indent 357d0353b83SRuslan Ermilov.It Xo 358d0353b83SRuslan Ermilov.Ft int 359d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock" 360d0353b83SRuslan Ermilov.Xc 361d4a76febSAlexander LangerDestroy a read/write lock object. 362d0353b83SRuslan Ermilov.It Xo 363d0353b83SRuslan Ermilov.Ft int 3648e750fa2SRuslan Ermilov.Fo pthread_rwlock_init 3658e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr" 3668e750fa2SRuslan Ermilov.Fc 367d0353b83SRuslan Ermilov.Xc 368d4a76febSAlexander LangerInitialize a read/write lock object. 369d0353b83SRuslan Ermilov.It Xo 370d0353b83SRuslan Ermilov.Ft int 371d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" 372d0353b83SRuslan Ermilov.Xc 373d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be 374d4a76febSAlexander Langeracquired. 375d0353b83SRuslan Ermilov.It Xo 376d0353b83SRuslan Ermilov.Ft int 377d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" 378d0353b83SRuslan Ermilov.Xc 379d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the 380d4a76febSAlexander Langerlock is unavailable. 381d0353b83SRuslan Ermilov.It Xo 382d0353b83SRuslan Ermilov.Ft int 383d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock" 384d0353b83SRuslan Ermilov.Xc 385d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the 386d4a76febSAlexander Langerlock is unavailable. 387d0353b83SRuslan Ermilov.It Xo 388d0353b83SRuslan Ermilov.Ft int 389d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock" 390d0353b83SRuslan Ermilov.Xc 391d4a76febSAlexander LangerUnlock a read/write lock. 392d0353b83SRuslan Ermilov.It Xo 393d0353b83SRuslan Ermilov.Ft int 394d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock" 395d0353b83SRuslan Ermilov.Xc 396d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be 397d4a76febSAlexander Langeracquired. 398d0353b83SRuslan Ermilov.It Xo 399d0353b83SRuslan Ermilov.Ft int 400d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" 401d0353b83SRuslan Ermilov.Xc 402d4a76febSAlexander LangerDestroy a read/write lock attribute object. 403d0353b83SRuslan Ermilov.It Xo 404d0353b83SRuslan Ermilov.Ft int 4058e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared 4068e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared" 4078e750fa2SRuslan Ermilov.Fc 408d0353b83SRuslan Ermilov.Xc 409d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute 410d4a76febSAlexander Langerobject. 411d0353b83SRuslan Ermilov.It Xo 412d0353b83SRuslan Ermilov.Ft int 413d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" 414d0353b83SRuslan Ermilov.Xc 415d4a76febSAlexander LangerInitialize a read/write lock attribute object. 416d0353b83SRuslan Ermilov.It Xo 417d0353b83SRuslan Ermilov.Ft int 418c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" 419d0353b83SRuslan Ermilov.Xc 420d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object. 421d4a76febSAlexander Langer.El 4228e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines 4238e750fa2SRuslan Ermilov.Bl -tag -width indent 424d0353b83SRuslan Ermilov.It Xo 425d0353b83SRuslan Ermilov.Ft int 4268e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" 427d0353b83SRuslan Ermilov.Xc 4280f7d6847SJulian ElischerCreate a thread-specific data key. 429d0353b83SRuslan Ermilov.It Xo 430d0353b83SRuslan Ermilov.Ft int 431d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key" 432d0353b83SRuslan Ermilov.Xc 4330f7d6847SJulian ElischerDelete a thread-specific data key. 434d0353b83SRuslan Ermilov.It Xo 435d0353b83SRuslan Ermilov.Ft "void *" 436c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key" 437d0353b83SRuslan Ermilov.Xc 4380f7d6847SJulian ElischerGet the thread-specific value for the specified key. 439d0353b83SRuslan Ermilov.It Xo 440d0353b83SRuslan Ermilov.Ft int 441d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr" 442d0353b83SRuslan Ermilov.Xc 4430f7d6847SJulian ElischerSet the thread-specific value for the specified key. 4440f7d6847SJulian Elischer.El 4458e750fa2SRuslan Ermilov.Ss Cleanup Routines 4468e750fa2SRuslan Ermilov.Bl -tag -width indent 447d0353b83SRuslan Ermilov.It Xo 448a3c8fc53SGiorgos Keramidas.Ft int 449a3c8fc53SGiorgos Keramidas.Fo pthread_atfork 450a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]" 451a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]" 452a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]" 453a3c8fc53SGiorgos Keramidas.Fc 454a3c8fc53SGiorgos Keramidas.Xc 455a3fb6da9SGlen BarberRegister fork handlers. 456a3c8fc53SGiorgos Keramidas.It Xo 457d0353b83SRuslan Ermilov.Ft void 458d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute" 459d0353b83SRuslan Ermilov.Xc 4600f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup 4610f7d6847SJulian Elischerstack and optionally invoke it. 462d0353b83SRuslan Ermilov.It Xo 463d0353b83SRuslan Ermilov.Ft void 4648e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg" 465d0353b83SRuslan Ermilov.Xc 4660f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's 4670f7d6847SJulian Elischercancellation stack. 4680f7d6847SJulian Elischer.El 4693e9ed1efSRuslan Ermilov.Sh IMPLEMENTATION NOTES 470b5c508fbSRuslan ErmilovThe current 471b5c508fbSRuslan Ermilov.Fx 4729c0f9817STom RhodesPOSIX thread implementation is built into the 4737ba7e041STom Rhodes.Lb libthr 4749c0f9817STom Rhodeslibrary. 4759c0f9817STom RhodesIt contains thread-safe versions of 476c133f2abSRuslan Ermilov.Lb libc 477c133f2abSRuslan Ermilovfunctions and the thread functions. 4789c0f9817STom RhodesThreaded applications are linked with this library. 479997d90beSBill Swingle.Sh SEE ALSO 4809c0f9817STom Rhodes.Xr libthr 3 , 481777f8cebSXin LI.Xr pthread_affinity_np 3 , 482a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 , 483777f8cebSXin LI.Xr pthread_attr 3 , 484c3f5198bSOlivier Houchard.Xr pthread_cancel 3 , 4855521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 , 4865521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 , 487c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 , 488c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 3 , 489997d90beSBill Swingle.Xr pthread_cond_broadcast 3 , 490997d90beSBill Swingle.Xr pthread_cond_destroy 3 , 491997d90beSBill Swingle.Xr pthread_cond_init 3 , 492997d90beSBill Swingle.Xr pthread_cond_signal 3 , 493997d90beSBill Swingle.Xr pthread_cond_timedwait 3 , 494997d90beSBill Swingle.Xr pthread_cond_wait 3 , 4955521ff5aSRuslan Ermilov.Xr pthread_create 3 , 4965521ff5aSRuslan Ermilov.Xr pthread_detach 3 , 4975521ff5aSRuslan Ermilov.Xr pthread_equal 3 , 4985521ff5aSRuslan Ermilov.Xr pthread_exit 3 , 4995521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 , 5005521ff5aSRuslan Ermilov.Xr pthread_join 3 , 5015521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 , 502d378717eSMaxim Konovalov.Xr pthread_kill 3 , 503d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 , 504d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 , 505d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 , 506d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 , 507d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 , 508d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 , 509d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 , 510d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 , 511c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 , 512c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 , 513c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 , 514c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 , 515c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 , 5165521ff5aSRuslan Ermilov.Xr pthread_once 3 , 5175521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 , 5185521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 , 5195521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 , 5205521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 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 , 5265521ff5aSRuslan Ermilov.Xr pthread_self 3 , 527d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 , 528d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 , 529d378717eSMaxim Konovalov.Xr pthread_setspecific 3 , 530d378717eSMaxim Konovalov.Xr pthread_testcancel 3 5310f7d6847SJulian Elischer.Sh STANDARDS 532c133f2abSRuslan ErmilovThe functions with the 533c133f2abSRuslan Ermilov.Nm pthread_ 534efc0456fSAlexander Langerprefix and not 535c133f2abSRuslan Ermilov.Nm _np 536d4a76febSAlexander Langersuffix or 537c133f2abSRuslan Ermilov.Nm pthread_rwlock 5383c233756SRuslan Ermilovprefix conform to 5393c233756SRuslan Ermilov.St -p1003.1-96 . 5400f7d6847SJulian Elischer.Pp 541c133f2abSRuslan ErmilovThe functions with the 542c133f2abSRuslan Ermilov.Nm pthread_ 5430f7d6847SJulian Elischerprefix and 544c133f2abSRuslan Ermilov.Nm _np 5450f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads. 546d4a76febSAlexander Langer.Pp 547c133f2abSRuslan ErmilovThe functions with the 548c133f2abSRuslan Ermilov.Nm pthread_rwlock 5493c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the 5503c233756SRuslan Ermilov.St -susv2 . 551