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.\" 33c133f2abSRuslan Ermilov.Dd January 15, 2004 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 415b8ef52dSSimon L. B. Nielsen.Lb libthr 42c70db3ffSBruce Evans.Sh SYNOPSIS 4332eef9aeSRuslan Ermilov.In pthread.h 440f7d6847SJulian Elischer.Sh DESCRIPTION 450f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with 460f7d6847SJulian Elischerrequirements for multiple flows of control, called 478e750fa2SRuslan Ermilov.Em threads , 486d249eeeSSheldon Hearnwithin a process. 496d249eeeSSheldon HearnMultithreading is used to improve the performance of a 500f7d6847SJulian Elischerprogram. 510f7d6847SJulian Elischer.Pp 520f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following 530f7d6847SJulian Elischergroups: 548e750fa2SRuslan Ermilov.Pp 558e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact 560f7d6847SJulian Elischer.It 57d4a76febSAlexander LangerThread Routines 580f7d6847SJulian Elischer.It 590f7d6847SJulian ElischerAttribute Object Routines 600f7d6847SJulian Elischer.It 610f7d6847SJulian ElischerMutex Routines 620f7d6847SJulian Elischer.It 630f7d6847SJulian ElischerCondition Variable Routines 640f7d6847SJulian Elischer.It 65d4a76febSAlexander LangerRead/Write Lock Routines 66d4a76febSAlexander Langer.It 670f7d6847SJulian ElischerPer-Thread Context Routines 680f7d6847SJulian Elischer.It 690f7d6847SJulian ElischerCleanup Routines 700f7d6847SJulian Elischer.El 718e750fa2SRuslan Ermilov.Ss Thread Routines 728e750fa2SRuslan Ermilov.Bl -tag -width indent 73d0353b83SRuslan Ermilov.It Xo 74d0353b83SRuslan Ermilov.Ft int 758e750fa2SRuslan Ermilov.Fo pthread_create 768e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr" 778e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg" 788e750fa2SRuslan Ermilov.Fc 79d0353b83SRuslan Ermilov.Xc 800f7d6847SJulian ElischerCreates a new thread of execution. 81d0353b83SRuslan Ermilov.It Xo 82d0353b83SRuslan Ermilov.Ft int 83d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread" 84d378717eSMaxim Konovalov.Xc 85d378717eSMaxim KonovalovCancels execution of a thread. 86d378717eSMaxim Konovalov.It Xo 87d378717eSMaxim Konovalov.Ft int 88d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread" 89d0353b83SRuslan Ermilov.Xc 900f7d6847SJulian ElischerMarks a thread for deletion. 91d0353b83SRuslan Ermilov.It Xo 92d0353b83SRuslan Ermilov.Ft int 93d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2" 94d0353b83SRuslan Ermilov.Xc 950f7d6847SJulian ElischerCompares two thread IDs. 96d0353b83SRuslan Ermilov.It Xo 97d0353b83SRuslan Ermilov.Ft void 98d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr" 99d0353b83SRuslan Ermilov.Xc 1000f7d6847SJulian ElischerTerminates the calling thread. 101d0353b83SRuslan Ermilov.It Xo 102d0353b83SRuslan Ermilov.Ft int 103d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr" 104d0353b83SRuslan Ermilov.Xc 1050f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread. 106d0353b83SRuslan Ermilov.It Xo 107d0353b83SRuslan Ermilov.Ft int 108d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig" 109d0353b83SRuslan Ermilov.Xc 110d378717eSMaxim KonovalovDelivers a signal to a specified thread. 111d0353b83SRuslan Ermilov.It Xo 112d0353b83SRuslan Ermilov.Ft int 1138e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]" 114d0353b83SRuslan Ermilov.Xc 1150f7d6847SJulian ElischerCalls an initialization routine once. 116d0353b83SRuslan Ermilov.It Xo 117d0353b83SRuslan Ermilov.Ft pthread_t 118d0353b83SRuslan Ermilov.Fn pthread_self void 119d0353b83SRuslan Ermilov.Xc 1200f7d6847SJulian ElischerReturns the thread ID of the calling thread. 121d378717eSMaxim Konovalov.It Xo 122d378717eSMaxim Konovalov.Ft int 123d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate" 124d378717eSMaxim Konovalov.Xc 125d378717eSMaxim KonovalovSets the current thread's cancelability state. 126d378717eSMaxim Konovalov.It Xo 127d378717eSMaxim Konovalov.Ft int 128d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype" 129d378717eSMaxim Konovalov.Xc 130d378717eSMaxim KonovalovSets the current thread's cancelability type. 131d378717eSMaxim Konovalov.It Xo 132d378717eSMaxim Konovalov.Ft void 133d378717eSMaxim Konovalov.Fn pthread_testcancel void 134d378717eSMaxim Konovalov.Xc 135d378717eSMaxim KonovalovCreates a cancellation point in the calling thread. 136d378717eSMaxim Konovalov.It Xo 137d378717eSMaxim Konovalov.Ft void 138d378717eSMaxim Konovalov.Fn pthread_yield void 139d378717eSMaxim Konovalov.Xc 140d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one. 1410f7d6847SJulian Elischer.El 1428e750fa2SRuslan Ermilov.Ss Attribute Object Routines 1438e750fa2SRuslan Ermilov.Bl -tag -width indent 144d0353b83SRuslan Ermilov.It Xo 145d0353b83SRuslan Ermilov.Ft int 146d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr" 147d0353b83SRuslan Ermilov.Xc 1480f7d6847SJulian ElischerDestroy a thread attributes object. 149d0353b83SRuslan Ermilov.It Xo 150d0353b83SRuslan Ermilov.Ft int 1518e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched 1528e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched" 1538e750fa2SRuslan Ermilov.Fc 154d0353b83SRuslan Ermilov.Xc 1550f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object. 156d0353b83SRuslan Ermilov.It Xo 157d0353b83SRuslan Ermilov.Ft int 1588e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam 1598e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param" 1608e750fa2SRuslan Ermilov.Fc 161d0353b83SRuslan Ermilov.Xc 1620f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object. 163d0353b83SRuslan Ermilov.It Xo 164d0353b83SRuslan Ermilov.Ft int 165c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy" 166d0353b83SRuslan Ermilov.Xc 1670f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object. 168d0353b83SRuslan Ermilov.It Xo 169d0353b83SRuslan Ermilov.Ft int 170c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope" 171d0353b83SRuslan Ermilov.Xc 1720f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object. 173d0353b83SRuslan Ermilov.It Xo 174d0353b83SRuslan Ermilov.Ft int 175c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize" 176d0353b83SRuslan Ermilov.Xc 1770f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object. 178d0353b83SRuslan Ermilov.It Xo 179d0353b83SRuslan Ermilov.Ft int 180c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr" 181d0353b83SRuslan Ermilov.Xc 1820f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object. 183d0353b83SRuslan Ermilov.It Xo 184d0353b83SRuslan Ermilov.Ft int 185c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate" 186d0353b83SRuslan Ermilov.Xc 1870f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object. 188d0353b83SRuslan Ermilov.It Xo 189d0353b83SRuslan Ermilov.Ft int 190d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr" 191d0353b83SRuslan Ermilov.Xc 1920f7d6847SJulian ElischerInitialize a thread attributes object with default values. 193d0353b83SRuslan Ermilov.It Xo 194d0353b83SRuslan Ermilov.Ft int 195d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched" 196d0353b83SRuslan Ermilov.Xc 1970f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object. 198d0353b83SRuslan Ermilov.It Xo 199d0353b83SRuslan Ermilov.Ft int 2008e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam 2018e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param" 2028e750fa2SRuslan Ermilov.Fc 203d0353b83SRuslan Ermilov.Xc 2040f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object. 205d0353b83SRuslan Ermilov.It Xo 206d0353b83SRuslan Ermilov.Ft int 207d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy" 208d0353b83SRuslan Ermilov.Xc 2090f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object. 210d0353b83SRuslan Ermilov.It Xo 211d0353b83SRuslan Ermilov.Ft int 212d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope" 213d0353b83SRuslan Ermilov.Xc 2140f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object. 215d0353b83SRuslan Ermilov.It Xo 216d0353b83SRuslan Ermilov.Ft int 217d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize" 218d0353b83SRuslan Ermilov.Xc 2190f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object. 220d0353b83SRuslan Ermilov.It Xo 221d0353b83SRuslan Ermilov.Ft int 222d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr" 223d0353b83SRuslan Ermilov.Xc 2240f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object. 225d0353b83SRuslan Ermilov.It Xo 226d0353b83SRuslan Ermilov.Ft int 227d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate" 228d0353b83SRuslan Ermilov.Xc 2290f7d6847SJulian ElischerSet the detach state in a thread attributes object. 2300f7d6847SJulian Elischer.El 2318e750fa2SRuslan Ermilov.Ss Mutex Routines 2328e750fa2SRuslan Ermilov.Bl -tag -width indent 233d0353b83SRuslan Ermilov.It Xo 234d0353b83SRuslan Ermilov.Ft int 235d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" 236d0353b83SRuslan Ermilov.Xc 2370f7d6847SJulian ElischerDestroy a mutex attributes object. 238d0353b83SRuslan Ermilov.It Xo 239d0353b83SRuslan Ermilov.Ft int 240d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling" 241d378717eSMaxim Konovalov.Xc 242d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object. 243d378717eSMaxim Konovalov.It Xo 244d378717eSMaxim Konovalov.Ft int 245d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol" 246d378717eSMaxim Konovalov.Xc 247d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object. 248d378717eSMaxim Konovalov.It Xo 249d378717eSMaxim Konovalov.Ft int 250d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type" 251d378717eSMaxim Konovalov.Xc 252d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object. 253d378717eSMaxim Konovalov.It Xo 254d378717eSMaxim Konovalov.Ft int 255d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" 256d0353b83SRuslan Ermilov.Xc 2570f7d6847SJulian ElischerInitialize a mutex attributes object with default values. 258d0353b83SRuslan Ermilov.It Xo 259d0353b83SRuslan Ermilov.Ft int 260d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling" 261d378717eSMaxim Konovalov.Xc 262d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object. 263d378717eSMaxim Konovalov.It Xo 264d378717eSMaxim Konovalov.Ft int 265d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol" 266d378717eSMaxim Konovalov.Xc 267d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object. 268d378717eSMaxim Konovalov.It Xo 269d378717eSMaxim Konovalov.Ft int 270d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" 271d378717eSMaxim Konovalov.Xc 272d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created. 273d378717eSMaxim Konovalov.It Xo 274d378717eSMaxim Konovalov.Ft int 275d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex" 276d0353b83SRuslan Ermilov.Xc 2770f7d6847SJulian ElischerDestroy a mutex. 278d0353b83SRuslan Ermilov.It Xo 279d0353b83SRuslan Ermilov.Ft int 2808e750fa2SRuslan Ermilov.Fo pthread_mutex_init 2818e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr" 2828e750fa2SRuslan Ermilov.Fc 283d0353b83SRuslan Ermilov.Xc 284dfb9495bSTim VanderhoekInitialize a mutex with specified attributes. 285d0353b83SRuslan Ermilov.It Xo 286d0353b83SRuslan Ermilov.Ft int 287d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex" 288d0353b83SRuslan Ermilov.Xc 2890f7d6847SJulian ElischerLock a mutex and block until it becomes available. 290d0353b83SRuslan Ermilov.It Xo 291d0353b83SRuslan Ermilov.Ft int 2928e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock 2938e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime" 2948e750fa2SRuslan Ermilov.Fc 2952aa9de1fSMike Makonnen.Xc 2962aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires. 2972aa9de1fSMike Makonnen.It Xo 2982aa9de1fSMike Makonnen.Ft int 299d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex" 300d0353b83SRuslan Ermilov.Xc 3010227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread, 3020f7d6847SJulian Elischerincluding the current thread. 303d0353b83SRuslan Ermilov.It Xo 304d0353b83SRuslan Ermilov.Ft int 305d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex" 306d0353b83SRuslan Ermilov.Xc 3070f7d6847SJulian ElischerUnlock a mutex. 3080f7d6847SJulian Elischer.El 3098e750fa2SRuslan Ermilov.Ss Condition Variable Routines 3108e750fa2SRuslan Ermilov.Bl -tag -width indent 311d0353b83SRuslan Ermilov.It Xo 312d0353b83SRuslan Ermilov.Ft int 313d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr" 314d0353b83SRuslan Ermilov.Xc 3150f7d6847SJulian ElischerDestroy a condition variable attributes object. 316d0353b83SRuslan Ermilov.It Xo 317d0353b83SRuslan Ermilov.Ft int 318d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr" 319d378717eSMaxim Konovalov.Xc 320d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values. 321d378717eSMaxim Konovalov.It Xo 322d378717eSMaxim Konovalov.Ft int 323d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond" 324d0353b83SRuslan Ermilov.Xc 3250f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable. 326d0353b83SRuslan Ermilov.It Xo 327d0353b83SRuslan Ermilov.Ft int 328d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond" 329d0353b83SRuslan Ermilov.Xc 3300f7d6847SJulian ElischerDestroy a condition variable. 331d0353b83SRuslan Ermilov.It Xo 332d0353b83SRuslan Ermilov.Ft int 333d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr" 334d0353b83SRuslan Ermilov.Xc 3350f7d6847SJulian ElischerInitialize a condition variable with specified attributes. 336d0353b83SRuslan Ermilov.It Xo 337d0353b83SRuslan Ermilov.Ft int 338d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond" 339d0353b83SRuslan Ermilov.Xc 3400f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable. 341d0353b83SRuslan Ermilov.It Xo 342d0353b83SRuslan Ermilov.Ft int 3438e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait 3448e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex" 3458e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime" 3468e750fa2SRuslan Ermilov.Fc 347d0353b83SRuslan Ermilov.Xc 3488e750fa2SRuslan ErmilovWait no longer than the specified time for a condition 3498e750fa2SRuslan Ermilovand lock the specified mutex. 350d0353b83SRuslan Ermilov.It Xo 351d0353b83SRuslan Ermilov.Ft int 352d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex" 353d0353b83SRuslan Ermilov.Xc 3540f7d6847SJulian ElischerWait for a condition and lock the specified mutex. 3550f7d6847SJulian Elischer.El 3568e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines 3578e750fa2SRuslan Ermilov.Bl -tag -width indent 358d0353b83SRuslan Ermilov.It Xo 359d0353b83SRuslan Ermilov.Ft int 360d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock" 361d0353b83SRuslan Ermilov.Xc 362d4a76febSAlexander LangerDestroy a read/write lock object. 363d0353b83SRuslan Ermilov.It Xo 364d0353b83SRuslan Ermilov.Ft int 3658e750fa2SRuslan Ermilov.Fo pthread_rwlock_init 3668e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr" 3678e750fa2SRuslan Ermilov.Fc 368d0353b83SRuslan Ermilov.Xc 369d4a76febSAlexander LangerInitialize a read/write lock object. 370d0353b83SRuslan Ermilov.It Xo 371d0353b83SRuslan Ermilov.Ft int 372d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" 373d0353b83SRuslan Ermilov.Xc 374d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be 375d4a76febSAlexander Langeracquired. 376d0353b83SRuslan Ermilov.It Xo 377d0353b83SRuslan Ermilov.Ft int 378d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" 379d0353b83SRuslan Ermilov.Xc 380d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the 381d4a76febSAlexander Langerlock is unavailable. 382d0353b83SRuslan Ermilov.It Xo 383d0353b83SRuslan Ermilov.Ft int 384d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock" 385d0353b83SRuslan Ermilov.Xc 386d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the 387d4a76febSAlexander Langerlock is unavailable. 388d0353b83SRuslan Ermilov.It Xo 389d0353b83SRuslan Ermilov.Ft int 390d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock" 391d0353b83SRuslan Ermilov.Xc 392d4a76febSAlexander LangerUnlock a read/write lock. 393d0353b83SRuslan Ermilov.It Xo 394d0353b83SRuslan Ermilov.Ft int 395d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock" 396d0353b83SRuslan Ermilov.Xc 397d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be 398d4a76febSAlexander Langeracquired. 399d0353b83SRuslan Ermilov.It Xo 400d0353b83SRuslan Ermilov.Ft int 401d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" 402d0353b83SRuslan Ermilov.Xc 403d4a76febSAlexander LangerDestroy a read/write lock attribute object. 404d0353b83SRuslan Ermilov.It Xo 405d0353b83SRuslan Ermilov.Ft int 4068e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared 4078e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared" 4088e750fa2SRuslan Ermilov.Fc 409d0353b83SRuslan Ermilov.Xc 410d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute 411d4a76febSAlexander Langerobject. 412d0353b83SRuslan Ermilov.It Xo 413d0353b83SRuslan Ermilov.Ft int 414d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" 415d0353b83SRuslan Ermilov.Xc 416d4a76febSAlexander LangerInitialize a read/write lock attribute object. 417d0353b83SRuslan Ermilov.It Xo 418d0353b83SRuslan Ermilov.Ft int 419c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" 420d0353b83SRuslan Ermilov.Xc 421d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object. 422d4a76febSAlexander Langer.El 4238e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines 4248e750fa2SRuslan Ermilov.Bl -tag -width indent 425d0353b83SRuslan Ermilov.It Xo 426d0353b83SRuslan Ermilov.Ft int 4278e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" 428d0353b83SRuslan Ermilov.Xc 4290f7d6847SJulian ElischerCreate a thread-specific data key. 430d0353b83SRuslan Ermilov.It Xo 431d0353b83SRuslan Ermilov.Ft int 432d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key" 433d0353b83SRuslan Ermilov.Xc 4340f7d6847SJulian ElischerDelete a thread-specific data key. 435d0353b83SRuslan Ermilov.It Xo 436d0353b83SRuslan Ermilov.Ft "void *" 437c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key" 438d0353b83SRuslan Ermilov.Xc 4390f7d6847SJulian ElischerGet the thread-specific value for the specified key. 440d0353b83SRuslan Ermilov.It Xo 441d0353b83SRuslan Ermilov.Ft int 442d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr" 443d0353b83SRuslan Ermilov.Xc 4440f7d6847SJulian ElischerSet the thread-specific value for the specified key. 4450f7d6847SJulian Elischer.El 4468e750fa2SRuslan Ermilov.Ss Cleanup Routines 4478e750fa2SRuslan Ermilov.Bl -tag -width indent 448d0353b83SRuslan Ermilov.It Xo 449a3c8fc53SGiorgos Keramidas.Ft int 450a3c8fc53SGiorgos Keramidas.Fo pthread_atfork 451a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]" 452a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]" 453a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]" 454a3c8fc53SGiorgos Keramidas.Fc 455a3c8fc53SGiorgos Keramidas.Xc 456a3c8fc53SGiorgos KeramidasRegister fork handlers 457a3c8fc53SGiorgos Keramidas.It Xo 458d0353b83SRuslan Ermilov.Ft void 459d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute" 460d0353b83SRuslan Ermilov.Xc 4610f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup 4620f7d6847SJulian Elischerstack and optionally invoke it. 463d0353b83SRuslan Ermilov.It Xo 464d0353b83SRuslan Ermilov.Ft void 4658e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg" 466d0353b83SRuslan Ermilov.Xc 4670f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's 4680f7d6847SJulian Elischercancellation stack. 4690f7d6847SJulian Elischer.El 4700f7d6847SJulian Elischer.Sh INSTALLATION 471b5c508fbSRuslan ErmilovThe current 472b5c508fbSRuslan Ermilov.Fx 4735bb9f210SRuslan ErmilovPOSIX thread implementation is built in two libraries, 474c133f2abSRuslan Ermilov.Lb libpthread , 475c133f2abSRuslan Ermilovand 476c133f2abSRuslan Ermilov.Lb libthr . 477c133f2abSRuslan ErmilovThey contain both thread-safe versions of 478c133f2abSRuslan Ermilov.Lb libc 479c133f2abSRuslan Ermilovfunctions and the thread functions. 480c133f2abSRuslan ErmilovThreaded applications are linked with one of these libraries. 481997d90beSBill Swingle.Sh SEE ALSO 482a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 , 483c3f5198bSOlivier Houchard.Xr pthread_cancel 3 , 4845521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 , 4855521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 , 486c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 , 487c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 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 , 4945521ff5aSRuslan Ermilov.Xr pthread_create 3 , 4955521ff5aSRuslan Ermilov.Xr pthread_detach 3 , 4965521ff5aSRuslan Ermilov.Xr pthread_equal 3 , 4975521ff5aSRuslan Ermilov.Xr pthread_exit 3 , 4985521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 , 4995521ff5aSRuslan Ermilov.Xr pthread_join 3 , 5005521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 , 501d378717eSMaxim Konovalov.Xr pthread_kill 3 , 502d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 , 503d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 , 504d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 , 505d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 , 506d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 , 507d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 , 508d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 , 509d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 , 510c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 , 511c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 , 512c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 , 513c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 , 514c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 , 5155521ff5aSRuslan Ermilov.Xr pthread_once 3 , 5165521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 , 5175521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 , 5185521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 , 5195521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 3 , 520997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 , 521997d90beSBill Swingle.Xr pthread_rwlock_init 3 , 522997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 , 523997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 , 524997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 , 5255521ff5aSRuslan Ermilov.Xr pthread_self 3 , 526d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 , 527d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 , 528d378717eSMaxim Konovalov.Xr pthread_setspecific 3 , 529d378717eSMaxim Konovalov.Xr pthread_testcancel 3 5300f7d6847SJulian Elischer.Sh STANDARDS 531c133f2abSRuslan ErmilovThe functions with the 532c133f2abSRuslan Ermilov.Nm pthread_ 533efc0456fSAlexander Langerprefix and not 534c133f2abSRuslan Ermilov.Nm _np 535d4a76febSAlexander Langersuffix or 536c133f2abSRuslan Ermilov.Nm pthread_rwlock 5373c233756SRuslan Ermilovprefix conform to 5383c233756SRuslan Ermilov.St -p1003.1-96 . 5390f7d6847SJulian Elischer.Pp 540c133f2abSRuslan ErmilovThe functions with the 541c133f2abSRuslan Ermilov.Nm pthread_ 5420f7d6847SJulian Elischerprefix and 543c133f2abSRuslan Ermilov.Nm _np 5440f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads. 545d4a76febSAlexander Langer.Pp 546c133f2abSRuslan ErmilovThe functions with the 547c133f2abSRuslan Ermilov.Nm pthread_rwlock 5483c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the 5493c233756SRuslan Ermilov.St -susv2 . 550