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.\" 33d4a76febSAlexander Langer.Dd September 10, 1998 340f7d6847SJulian Elischer.Dt PTHREAD 3 353d45e180SRuslan Ermilov.Os 360f7d6847SJulian Elischer.Sh NAME 370f7d6847SJulian Elischer.Nm pthread 380f7d6847SJulian Elischer.Nd POSIX thread functions 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 688e750fa2SRuslan Ermilov.Ss Thread Routines 698e750fa2SRuslan Ermilov.Bl -tag -width indent 70d0353b83SRuslan Ermilov.It Xo 71d0353b83SRuslan Ermilov.Ft int 728e750fa2SRuslan Ermilov.Fo pthread_create 738e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr" 748e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg" 758e750fa2SRuslan Ermilov.Fc 76d0353b83SRuslan Ermilov.Xc 770f7d6847SJulian ElischerCreates a new thread of execution. 78d0353b83SRuslan Ermilov.It Xo 79d0353b83SRuslan Ermilov.Ft int 80d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread" 81d378717eSMaxim Konovalov.Xc 82d378717eSMaxim KonovalovCancels execution of a thread. 83d378717eSMaxim Konovalov.It Xo 84d378717eSMaxim Konovalov.Ft int 85d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread" 86d0353b83SRuslan Ermilov.Xc 870f7d6847SJulian ElischerMarks a thread for deletion. 88d0353b83SRuslan Ermilov.It Xo 89d0353b83SRuslan Ermilov.Ft int 90d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2" 91d0353b83SRuslan Ermilov.Xc 920f7d6847SJulian ElischerCompares two thread IDs. 93d0353b83SRuslan Ermilov.It Xo 94d0353b83SRuslan Ermilov.Ft void 95d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr" 96d0353b83SRuslan Ermilov.Xc 970f7d6847SJulian ElischerTerminates the calling thread. 98d0353b83SRuslan Ermilov.It Xo 99d0353b83SRuslan Ermilov.Ft int 100d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr" 101d0353b83SRuslan Ermilov.Xc 1020f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread. 103d0353b83SRuslan Ermilov.It Xo 104d0353b83SRuslan Ermilov.Ft int 105d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig" 106d0353b83SRuslan Ermilov.Xc 107d378717eSMaxim KonovalovDelivers a signal to a specified thread. 108d0353b83SRuslan Ermilov.It Xo 109d0353b83SRuslan Ermilov.Ft int 1108e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]" 111d0353b83SRuslan Ermilov.Xc 1120f7d6847SJulian ElischerCalls an initialization routine once. 113d0353b83SRuslan Ermilov.It Xo 114d0353b83SRuslan Ermilov.Ft pthread_t 115d0353b83SRuslan Ermilov.Fn pthread_self void 116d0353b83SRuslan Ermilov.Xc 1170f7d6847SJulian ElischerReturns the thread ID of the calling thread. 118d378717eSMaxim Konovalov.It Xo 119d378717eSMaxim Konovalov.Ft int 120d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate" 121d378717eSMaxim Konovalov.Xc 122d378717eSMaxim KonovalovSets the current thread's cancelability state. 123d378717eSMaxim Konovalov.It Xo 124d378717eSMaxim Konovalov.Ft int 125d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype" 126d378717eSMaxim Konovalov.Xc 127d378717eSMaxim KonovalovSets the current thread's cancelability type. 128d378717eSMaxim Konovalov.It Xo 129d378717eSMaxim Konovalov.Ft void 130d378717eSMaxim Konovalov.Fn pthread_testcancel void 131d378717eSMaxim Konovalov.Xc 132d378717eSMaxim KonovalovCreates a cancellation point in the calling thread. 133d378717eSMaxim Konovalov.It Xo 134d378717eSMaxim Konovalov.Ft void 135d378717eSMaxim Konovalov.Fn pthread_yield void 136d378717eSMaxim Konovalov.Xc 137d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one. 1380f7d6847SJulian Elischer.El 1398e750fa2SRuslan Ermilov.Ss Attribute Object Routines 1408e750fa2SRuslan Ermilov.Bl -tag -width indent 141d0353b83SRuslan Ermilov.It Xo 142d0353b83SRuslan Ermilov.Ft int 143d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr" 144d0353b83SRuslan Ermilov.Xc 1450f7d6847SJulian ElischerDestroy a thread attributes object. 146d0353b83SRuslan Ermilov.It Xo 147d0353b83SRuslan Ermilov.Ft int 1488e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched 1498e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched" 1508e750fa2SRuslan Ermilov.Fc 151d0353b83SRuslan Ermilov.Xc 1520f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object. 153d0353b83SRuslan Ermilov.It Xo 154d0353b83SRuslan Ermilov.Ft int 1558e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam 1568e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param" 1578e750fa2SRuslan Ermilov.Fc 158d0353b83SRuslan Ermilov.Xc 1590f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object. 160d0353b83SRuslan Ermilov.It Xo 161d0353b83SRuslan Ermilov.Ft int 162c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy" 163d0353b83SRuslan Ermilov.Xc 1640f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object. 165d0353b83SRuslan Ermilov.It Xo 166d0353b83SRuslan Ermilov.Ft int 167c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope" 168d0353b83SRuslan Ermilov.Xc 1690f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object. 170d0353b83SRuslan Ermilov.It Xo 171d0353b83SRuslan Ermilov.Ft int 172c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize" 173d0353b83SRuslan Ermilov.Xc 1740f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object. 175d0353b83SRuslan Ermilov.It Xo 176d0353b83SRuslan Ermilov.Ft int 177c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr" 178d0353b83SRuslan Ermilov.Xc 1790f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object. 180d0353b83SRuslan Ermilov.It Xo 181d0353b83SRuslan Ermilov.Ft int 182c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate" 183d0353b83SRuslan Ermilov.Xc 1840f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object. 185d0353b83SRuslan Ermilov.It Xo 186d0353b83SRuslan Ermilov.Ft int 187d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr" 188d0353b83SRuslan Ermilov.Xc 1890f7d6847SJulian ElischerInitialize a thread attributes object with default values. 190d0353b83SRuslan Ermilov.It Xo 191d0353b83SRuslan Ermilov.Ft int 192d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched" 193d0353b83SRuslan Ermilov.Xc 1940f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object. 195d0353b83SRuslan Ermilov.It Xo 196d0353b83SRuslan Ermilov.Ft int 1978e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam 1988e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param" 1998e750fa2SRuslan Ermilov.Fc 200d0353b83SRuslan Ermilov.Xc 2010f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object. 202d0353b83SRuslan Ermilov.It Xo 203d0353b83SRuslan Ermilov.Ft int 204d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy" 205d0353b83SRuslan Ermilov.Xc 2060f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object. 207d0353b83SRuslan Ermilov.It Xo 208d0353b83SRuslan Ermilov.Ft int 209d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope" 210d0353b83SRuslan Ermilov.Xc 2110f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object. 212d0353b83SRuslan Ermilov.It Xo 213d0353b83SRuslan Ermilov.Ft int 214d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize" 215d0353b83SRuslan Ermilov.Xc 2160f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object. 217d0353b83SRuslan Ermilov.It Xo 218d0353b83SRuslan Ermilov.Ft int 219d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr" 220d0353b83SRuslan Ermilov.Xc 2210f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object. 222d0353b83SRuslan Ermilov.It Xo 223d0353b83SRuslan Ermilov.Ft int 224d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate" 225d0353b83SRuslan Ermilov.Xc 2260f7d6847SJulian ElischerSet the detach state in a thread attributes object. 2270f7d6847SJulian Elischer.El 2288e750fa2SRuslan Ermilov.Ss Mutex Routines 2298e750fa2SRuslan Ermilov.Bl -tag -width indent 230d0353b83SRuslan Ermilov.It Xo 231d0353b83SRuslan Ermilov.Ft int 232d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" 233d0353b83SRuslan Ermilov.Xc 2340f7d6847SJulian ElischerDestroy a mutex attributes object. 235d0353b83SRuslan Ermilov.It Xo 236d0353b83SRuslan Ermilov.Ft int 237d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling" 238d378717eSMaxim Konovalov.Xc 239d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object. 240d378717eSMaxim Konovalov.It Xo 241d378717eSMaxim Konovalov.Ft int 242d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol" 243d378717eSMaxim Konovalov.Xc 244d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object. 245d378717eSMaxim Konovalov.It Xo 246d378717eSMaxim Konovalov.Ft int 247d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type" 248d378717eSMaxim Konovalov.Xc 249d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object. 250d378717eSMaxim Konovalov.It Xo 251d378717eSMaxim Konovalov.Ft int 252d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" 253d0353b83SRuslan Ermilov.Xc 2540f7d6847SJulian ElischerInitialize a mutex attributes object with default values. 255d0353b83SRuslan Ermilov.It Xo 256d0353b83SRuslan Ermilov.Ft int 257d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling" 258d378717eSMaxim Konovalov.Xc 259d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object. 260d378717eSMaxim Konovalov.It Xo 261d378717eSMaxim Konovalov.Ft int 262d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol" 263d378717eSMaxim Konovalov.Xc 264d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object. 265d378717eSMaxim Konovalov.It Xo 266d378717eSMaxim Konovalov.Ft int 267d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" 268d378717eSMaxim Konovalov.Xc 269d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created. 270d378717eSMaxim Konovalov.It Xo 271d378717eSMaxim Konovalov.Ft int 272d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex" 273d0353b83SRuslan Ermilov.Xc 2740f7d6847SJulian ElischerDestroy a mutex. 275d0353b83SRuslan Ermilov.It Xo 276d0353b83SRuslan Ermilov.Ft int 2778e750fa2SRuslan Ermilov.Fo pthread_mutex_init 2788e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr" 2798e750fa2SRuslan Ermilov.Fc 280d0353b83SRuslan Ermilov.Xc 281dfb9495bSTim VanderhoekInitialize a mutex with specified attributes. 282d0353b83SRuslan Ermilov.It Xo 283d0353b83SRuslan Ermilov.Ft int 284d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex" 285d0353b83SRuslan Ermilov.Xc 2860f7d6847SJulian ElischerLock a mutex and block until it becomes available. 287d0353b83SRuslan Ermilov.It Xo 288d0353b83SRuslan Ermilov.Ft int 2898e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock 2908e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime" 2918e750fa2SRuslan Ermilov.Fc 2922aa9de1fSMike Makonnen.Xc 2932aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires. 2942aa9de1fSMike Makonnen.It Xo 2952aa9de1fSMike Makonnen.Ft int 296d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex" 297d0353b83SRuslan Ermilov.Xc 2980f7d6847SJulian ElischerTry to lock a mutex, but don't block if the mutex is locked by another thread, 2990f7d6847SJulian Elischerincluding the current thread. 300d0353b83SRuslan Ermilov.It Xo 301d0353b83SRuslan Ermilov.Ft int 302d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex" 303d0353b83SRuslan Ermilov.Xc 3040f7d6847SJulian ElischerUnlock a mutex. 3050f7d6847SJulian Elischer.El 3068e750fa2SRuslan Ermilov.Ss Condition Variable Routines 3078e750fa2SRuslan Ermilov.Bl -tag -width indent 308d0353b83SRuslan Ermilov.It Xo 309d0353b83SRuslan Ermilov.Ft int 310d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr" 311d0353b83SRuslan Ermilov.Xc 3120f7d6847SJulian ElischerDestroy a condition variable attributes object. 313d0353b83SRuslan Ermilov.It Xo 314d0353b83SRuslan Ermilov.Ft int 315d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr" 316d378717eSMaxim Konovalov.Xc 317d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values. 318d378717eSMaxim Konovalov.It Xo 319d378717eSMaxim Konovalov.Ft int 320d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond" 321d0353b83SRuslan Ermilov.Xc 3220f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable. 323d0353b83SRuslan Ermilov.It Xo 324d0353b83SRuslan Ermilov.Ft int 325d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond" 326d0353b83SRuslan Ermilov.Xc 3270f7d6847SJulian ElischerDestroy a condition variable. 328d0353b83SRuslan Ermilov.It Xo 329d0353b83SRuslan Ermilov.Ft int 330d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr" 331d0353b83SRuslan Ermilov.Xc 3320f7d6847SJulian ElischerInitialize a condition variable with specified attributes. 333d0353b83SRuslan Ermilov.It Xo 334d0353b83SRuslan Ermilov.Ft int 335d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond" 336d0353b83SRuslan Ermilov.Xc 3370f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable. 338d0353b83SRuslan Ermilov.It Xo 339d0353b83SRuslan Ermilov.Ft int 3408e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait 3418e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex" 3428e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime" 3438e750fa2SRuslan Ermilov.Fc 344d0353b83SRuslan Ermilov.Xc 3458e750fa2SRuslan ErmilovWait no longer than the specified time for a condition 3468e750fa2SRuslan Ermilovand lock the specified mutex. 347d0353b83SRuslan Ermilov.It Xo 348d0353b83SRuslan Ermilov.Ft int 349d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex" 350d0353b83SRuslan Ermilov.Xc 3510f7d6847SJulian ElischerWait for a condition and lock the specified mutex. 3520f7d6847SJulian Elischer.El 3538e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines 3548e750fa2SRuslan Ermilov.Bl -tag -width indent 355d0353b83SRuslan Ermilov.It Xo 356d0353b83SRuslan Ermilov.Ft int 357d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock" 358d0353b83SRuslan Ermilov.Xc 359d4a76febSAlexander LangerDestroy a read/write lock object. 360d0353b83SRuslan Ermilov.It Xo 361d0353b83SRuslan Ermilov.Ft int 3628e750fa2SRuslan Ermilov.Fo pthread_rwlock_init 3638e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr" 3648e750fa2SRuslan Ermilov.Fc 365d0353b83SRuslan Ermilov.Xc 366d4a76febSAlexander LangerInitialize a read/write lock object. 367d0353b83SRuslan Ermilov.It Xo 368d0353b83SRuslan Ermilov.Ft int 369d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" 370d0353b83SRuslan Ermilov.Xc 371d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be 372d4a76febSAlexander Langeracquired. 373d0353b83SRuslan Ermilov.It Xo 374d0353b83SRuslan Ermilov.Ft int 375d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" 376d0353b83SRuslan Ermilov.Xc 377d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the 378d4a76febSAlexander Langerlock is unavailable. 379d0353b83SRuslan Ermilov.It Xo 380d0353b83SRuslan Ermilov.Ft int 381d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock" 382d0353b83SRuslan Ermilov.Xc 383d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the 384d4a76febSAlexander Langerlock is unavailable. 385d0353b83SRuslan Ermilov.It Xo 386d0353b83SRuslan Ermilov.Ft int 387d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock" 388d0353b83SRuslan Ermilov.Xc 389d4a76febSAlexander LangerUnlock a read/write lock. 390d0353b83SRuslan Ermilov.It Xo 391d0353b83SRuslan Ermilov.Ft int 392d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock" 393d0353b83SRuslan Ermilov.Xc 394d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be 395d4a76febSAlexander Langeracquired. 396d0353b83SRuslan Ermilov.It Xo 397d0353b83SRuslan Ermilov.Ft int 398d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" 399d0353b83SRuslan Ermilov.Xc 400d4a76febSAlexander LangerDestroy a read/write lock attribute object. 401d0353b83SRuslan Ermilov.It Xo 402d0353b83SRuslan Ermilov.Ft int 4038e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared 4048e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared" 4058e750fa2SRuslan Ermilov.Fc 406d0353b83SRuslan Ermilov.Xc 407d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute 408d4a76febSAlexander Langerobject. 409d0353b83SRuslan Ermilov.It Xo 410d0353b83SRuslan Ermilov.Ft int 411d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" 412d0353b83SRuslan Ermilov.Xc 413d4a76febSAlexander LangerInitialize a read/write lock attribute object. 414d0353b83SRuslan Ermilov.It Xo 415d0353b83SRuslan Ermilov.Ft int 416c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" 417d0353b83SRuslan Ermilov.Xc 418d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object. 419d4a76febSAlexander Langer.El 4208e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines 4218e750fa2SRuslan Ermilov.Bl -tag -width indent 422d0353b83SRuslan Ermilov.It Xo 423d0353b83SRuslan Ermilov.Ft int 4248e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" 425d0353b83SRuslan Ermilov.Xc 4260f7d6847SJulian ElischerCreate a thread-specific data key. 427d0353b83SRuslan Ermilov.It Xo 428d0353b83SRuslan Ermilov.Ft int 429d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key" 430d0353b83SRuslan Ermilov.Xc 4310f7d6847SJulian ElischerDelete a thread-specific data key. 432d0353b83SRuslan Ermilov.It Xo 433d0353b83SRuslan Ermilov.Ft "void *" 434c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key" 435d0353b83SRuslan Ermilov.Xc 4360f7d6847SJulian ElischerGet the thread-specific value for the specified key. 437d0353b83SRuslan Ermilov.It Xo 438d0353b83SRuslan Ermilov.Ft int 439d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr" 440d0353b83SRuslan Ermilov.Xc 4410f7d6847SJulian ElischerSet the thread-specific value for the specified key. 4420f7d6847SJulian Elischer.El 4438e750fa2SRuslan Ermilov.Ss Cleanup Routines 4448e750fa2SRuslan Ermilov.Bl -tag -width indent 445d0353b83SRuslan Ermilov.It Xo 446d0353b83SRuslan Ermilov.Ft void 447d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute" 448d0353b83SRuslan Ermilov.Xc 4490f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup 4500f7d6847SJulian Elischerstack and optionally invoke it. 451d0353b83SRuslan Ermilov.It Xo 452d0353b83SRuslan Ermilov.Ft void 4538e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg" 454d0353b83SRuslan Ermilov.Xc 4550f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's 4560f7d6847SJulian Elischercancellation stack. 4570f7d6847SJulian Elischer.El 4580f7d6847SJulian Elischer.Sh INSTALLATION 459b5c508fbSRuslan ErmilovThe current 460b5c508fbSRuslan Ermilov.Fx 461b5c508fbSRuslan ErmilovPOSIX thread implementation is built in the library 4620f7d6847SJulian Elischer.Fa libc_r 4630f7d6847SJulian Elischerwhich contains both thread-safe libc functions and the thread functions. 4640f7d6847SJulian ElischerThis library replaces 4650f7d6847SJulian Elischer.Fa libc 4660f7d6847SJulian Elischerfor threaded applications. 4670f7d6847SJulian Elischer.Pp 4680f7d6847SJulian ElischerBy default, 4690f7d6847SJulian Elischer.Fa libc_r 4708e750fa2SRuslan Ermilovis built as part of a 'make world'. 4718e750fa2SRuslan ErmilovTo disable the build of 4720f7d6847SJulian Elischer.Fa libc_r 473106115b3SSteve Priceyou must supply the '-DNOLIBC_R' option to 474106115b3SSteve Price.Xr make 1 . 475087ee430SJohn Birrell.Pp 476b5c508fbSRuslan ErmilovA 477b5c508fbSRuslan Ermilov.Fx 478b5c508fbSRuslan Ermilovspecific option has been added to gcc to make linking 479087ee430SJohn Birrellthreaded processes simple. 480087ee430SJohn Birrell.Fa gcc -pthread 481087ee430SJohn Birrelllinks a threaded process against 482087ee430SJohn Birrell.Fa libc_r 483087ee430SJohn Birrellinstead of 484087ee430SJohn Birrell.Fa libc . 485997d90beSBill Swingle.Sh SEE ALSO 4865521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 , 4875521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 , 488c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 , 489c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 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 , 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 , 504d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 , 505d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 , 506d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 , 507d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 , 508d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 , 509d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 , 510d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 , 511d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 , 512c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 , 513c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 , 514c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 , 515c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 , 516c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 , 5175521ff5aSRuslan Ermilov.Xr pthread_once 3 , 5185521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 , 5195521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 , 5205521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 , 5215521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 3 , 522997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 , 523997d90beSBill Swingle.Xr pthread_rwlock_init 3 , 524997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 , 525997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 , 526997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 , 5275521ff5aSRuslan Ermilov.Xr pthread_self 3 , 528d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 , 529d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 , 530d378717eSMaxim Konovalov.Xr pthread_setspecific 3 , 531d378717eSMaxim Konovalov.Xr pthread_testcancel 3 5320f7d6847SJulian Elischer.Sh STANDARDS 5330f7d6847SJulian ElischerThe functions in 5340f7d6847SJulian Elischer.Fa libc_r 5350f7d6847SJulian Elischerwith the 5360f7d6847SJulian Elischer.Fa pthread_ 537efc0456fSAlexander Langerprefix and not 5380f7d6847SJulian Elischer.Fa _np 539d4a76febSAlexander Langersuffix or 540d4a76febSAlexander Langer.Fa pthread_rwlock 5413c233756SRuslan Ermilovprefix conform to 5423c233756SRuslan Ermilov.St -p1003.1-96 . 5430f7d6847SJulian Elischer.Pp 5440f7d6847SJulian ElischerThe functions in libc_r with the 5450f7d6847SJulian Elischer.Fa pthread_ 5460f7d6847SJulian Elischerprefix and 5470f7d6847SJulian Elischer.Fa _np 5480f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads. 549d4a76febSAlexander Langer.Pp 550d4a76febSAlexander LangerThe functions in libc_r with the 551d4a76febSAlexander Langer.Fa pthread_rwlock 5523c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the 5533c233756SRuslan Ermilov.St -susv2 . 554