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 440f7d6847SJulian Elischer.Fa 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: 510f7d6847SJulian Elischer.Bl -bullet -offset indent 520f7d6847SJulian Elischer.It 53d4a76febSAlexander LangerThread Routines 540f7d6847SJulian Elischer.It 550f7d6847SJulian ElischerAttribute Object Routines 560f7d6847SJulian Elischer.It 570f7d6847SJulian ElischerMutex Routines 580f7d6847SJulian Elischer.It 590f7d6847SJulian ElischerCondition Variable Routines 600f7d6847SJulian Elischer.It 61d4a76febSAlexander LangerRead/Write Lock Routines 62d4a76febSAlexander Langer.It 630f7d6847SJulian ElischerPer-Thread Context Routines 640f7d6847SJulian Elischer.It 650f7d6847SJulian ElischerCleanup Routines 660f7d6847SJulian Elischer.El 670f7d6847SJulian Elischer.Sh THREAD ROUTINES 680f7d6847SJulian Elischer.Bl -tag -width Er 69d0353b83SRuslan Ermilov.It Xo 70d0353b83SRuslan Ermilov.Ft int 71d0353b83SRuslan Ermilov.Fn pthread_create "pthread_t *thread" "const pthread_attr_t *attr" "void *(*start_routine)(void *)" "void *arg" 72d0353b83SRuslan Ermilov.Xc 730f7d6847SJulian ElischerCreates a new thread of execution. 74d0353b83SRuslan Ermilov.It Xo 75d0353b83SRuslan Ermilov.Ft int 76d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread" 77d378717eSMaxim Konovalov.Xc 78d378717eSMaxim KonovalovCancels execution of a thread. 79d378717eSMaxim Konovalov.It Xo 80d378717eSMaxim Konovalov.Ft int 81d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread" 82d0353b83SRuslan Ermilov.Xc 830f7d6847SJulian ElischerMarks a thread for deletion. 84d0353b83SRuslan Ermilov.It Xo 85d0353b83SRuslan Ermilov.Ft int 86d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2" 87d0353b83SRuslan Ermilov.Xc 880f7d6847SJulian ElischerCompares two thread IDs. 89d0353b83SRuslan Ermilov.It Xo 90d0353b83SRuslan Ermilov.Ft void 91d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr" 92d0353b83SRuslan Ermilov.Xc 930f7d6847SJulian ElischerTerminates the calling thread. 94d0353b83SRuslan Ermilov.It Xo 95d0353b83SRuslan Ermilov.Ft int 96d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr" 97d0353b83SRuslan Ermilov.Xc 980f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread. 99d0353b83SRuslan Ermilov.It Xo 100d0353b83SRuslan Ermilov.Ft int 101d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig" 102d0353b83SRuslan Ermilov.Xc 103d378717eSMaxim KonovalovDelivers a signal to a specified thread. 104d0353b83SRuslan Ermilov.It Xo 105d0353b83SRuslan Ermilov.Ft int 106d0353b83SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void (*init_routine)(void)" 107d0353b83SRuslan Ermilov.Xc 1080f7d6847SJulian ElischerCalls an initialization routine once. 109d0353b83SRuslan Ermilov.It Xo 110d0353b83SRuslan Ermilov.Ft pthread_t 111d0353b83SRuslan Ermilov.Fn pthread_self void 112d0353b83SRuslan Ermilov.Xc 1130f7d6847SJulian ElischerReturns the thread ID of the calling thread. 114d378717eSMaxim Konovalov.It Xo 115d378717eSMaxim Konovalov.Ft int 116d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate" 117d378717eSMaxim Konovalov.Xc 118d378717eSMaxim KonovalovSets the current thread's cancelability state. 119d378717eSMaxim Konovalov.It Xo 120d378717eSMaxim Konovalov.Ft int 121d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype" 122d378717eSMaxim Konovalov.Xc 123d378717eSMaxim KonovalovSets the current thread's cancelability type. 124d378717eSMaxim Konovalov.It Xo 125d378717eSMaxim Konovalov.Ft void 126d378717eSMaxim Konovalov.Fn pthread_testcancel void 127d378717eSMaxim Konovalov.Xc 128d378717eSMaxim KonovalovCreates a cancellation point in the calling thread. 129d378717eSMaxim Konovalov.It Xo 130d378717eSMaxim Konovalov.Ft void 131d378717eSMaxim Konovalov.Fn pthread_yield void 132d378717eSMaxim Konovalov.Xc 133d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one. 1340f7d6847SJulian Elischer.El 1350f7d6847SJulian Elischer.Sh ATTRIBUTE OBJECT ROUTINES 1360f7d6847SJulian Elischer.Bl -tag -width Er 137d0353b83SRuslan Ermilov.It Xo 138d0353b83SRuslan Ermilov.Ft int 139d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr" 140d0353b83SRuslan Ermilov.Xc 1410f7d6847SJulian ElischerDestroy a thread attributes object. 142d0353b83SRuslan Ermilov.It Xo 143d0353b83SRuslan Ermilov.Ft int 144c70db3ffSBruce Evans.Fn pthread_attr_getinheritsched "const pthread_attr_t *attr" "int *inheritsched" 145d0353b83SRuslan Ermilov.Xc 1460f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object. 147d0353b83SRuslan Ermilov.It Xo 148d0353b83SRuslan Ermilov.Ft int 149c70db3ffSBruce Evans.Fn pthread_attr_getschedparam "const pthread_attr_t *attr" "struct sched_param *param" 150d0353b83SRuslan Ermilov.Xc 1510f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object. 152d0353b83SRuslan Ermilov.It Xo 153d0353b83SRuslan Ermilov.Ft int 154c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy" 155d0353b83SRuslan Ermilov.Xc 1560f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object. 157d0353b83SRuslan Ermilov.It Xo 158d0353b83SRuslan Ermilov.Ft int 159c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope" 160d0353b83SRuslan Ermilov.Xc 1610f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object. 162d0353b83SRuslan Ermilov.It Xo 163d0353b83SRuslan Ermilov.Ft int 164c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize" 165d0353b83SRuslan Ermilov.Xc 1660f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object. 167d0353b83SRuslan Ermilov.It Xo 168d0353b83SRuslan Ermilov.Ft int 169c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr" 170d0353b83SRuslan Ermilov.Xc 1710f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object. 172d0353b83SRuslan Ermilov.It Xo 173d0353b83SRuslan Ermilov.Ft int 174c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate" 175d0353b83SRuslan Ermilov.Xc 1760f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object. 177d0353b83SRuslan Ermilov.It Xo 178d0353b83SRuslan Ermilov.Ft int 179d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr" 180d0353b83SRuslan Ermilov.Xc 1810f7d6847SJulian ElischerInitialize a thread attributes object with default values. 182d0353b83SRuslan Ermilov.It Xo 183d0353b83SRuslan Ermilov.Ft int 184d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched" 185d0353b83SRuslan Ermilov.Xc 1860f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object. 187d0353b83SRuslan Ermilov.It Xo 188d0353b83SRuslan Ermilov.Ft int 189c70db3ffSBruce Evans.Fn pthread_attr_setschedparam "pthread_attr_t *attr" "const struct sched_param *param" 190d0353b83SRuslan Ermilov.Xc 1910f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object. 192d0353b83SRuslan Ermilov.It Xo 193d0353b83SRuslan Ermilov.Ft int 194d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy" 195d0353b83SRuslan Ermilov.Xc 1960f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object. 197d0353b83SRuslan Ermilov.It Xo 198d0353b83SRuslan Ermilov.Ft int 199d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope" 200d0353b83SRuslan Ermilov.Xc 2010f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object. 202d0353b83SRuslan Ermilov.It Xo 203d0353b83SRuslan Ermilov.Ft int 204d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize" 205d0353b83SRuslan Ermilov.Xc 2060f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object. 207d0353b83SRuslan Ermilov.It Xo 208d0353b83SRuslan Ermilov.Ft int 209d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr" 210d0353b83SRuslan Ermilov.Xc 2110f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object. 212d0353b83SRuslan Ermilov.It Xo 213d0353b83SRuslan Ermilov.Ft int 214d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate" 215d0353b83SRuslan Ermilov.Xc 2160f7d6847SJulian ElischerSet the detach state in a thread attributes object. 2170f7d6847SJulian Elischer.El 2180f7d6847SJulian Elischer.Sh MUTEX ROUTINES 2190f7d6847SJulian Elischer.Bl -tag -width Er 220d0353b83SRuslan Ermilov.It Xo 221d0353b83SRuslan Ermilov.Ft int 222d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr" 223d0353b83SRuslan Ermilov.Xc 2240f7d6847SJulian ElischerDestroy a mutex attributes object. 225d0353b83SRuslan Ermilov.It Xo 226d0353b83SRuslan Ermilov.Ft int 227d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling" 228d378717eSMaxim Konovalov.Xc 229d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object. 230d378717eSMaxim Konovalov.It Xo 231d378717eSMaxim Konovalov.Ft int 232d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol" 233d378717eSMaxim Konovalov.Xc 234d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object. 235d378717eSMaxim Konovalov.It Xo 236d378717eSMaxim Konovalov.Ft int 237d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type" 238d378717eSMaxim Konovalov.Xc 239d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object. 240d378717eSMaxim Konovalov.It Xo 241d378717eSMaxim Konovalov.Ft int 242d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr" 243d0353b83SRuslan Ermilov.Xc 2440f7d6847SJulian ElischerInitialize a mutex attributes object with default values. 245d0353b83SRuslan Ermilov.It Xo 246d0353b83SRuslan Ermilov.Ft int 247d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling" 248d378717eSMaxim Konovalov.Xc 249d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object. 250d378717eSMaxim Konovalov.It Xo 251d378717eSMaxim Konovalov.Ft int 252d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol" 253d378717eSMaxim Konovalov.Xc 254d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object. 255d378717eSMaxim Konovalov.It Xo 256d378717eSMaxim Konovalov.Ft int 257d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type" 258d378717eSMaxim Konovalov.Xc 259d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created. 260d378717eSMaxim Konovalov.It Xo 261d378717eSMaxim Konovalov.Ft int 262d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex" 263d0353b83SRuslan Ermilov.Xc 2640f7d6847SJulian ElischerDestroy a mutex. 265d0353b83SRuslan Ermilov.It Xo 266d0353b83SRuslan Ermilov.Ft int 267d0353b83SRuslan Ermilov.Fn pthread_mutex_init "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr" 268d0353b83SRuslan Ermilov.Xc 269dfb9495bSTim VanderhoekInitialize a mutex with specified attributes. 270d0353b83SRuslan Ermilov.It Xo 271d0353b83SRuslan Ermilov.Ft int 272d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex" 273d0353b83SRuslan Ermilov.Xc 2740f7d6847SJulian ElischerLock a mutex and block until it becomes available. 275d0353b83SRuslan Ermilov.It Xo 276d0353b83SRuslan Ermilov.Ft int 2772aa9de1fSMike Makonnen.Fn pthread_mutex_timedlock "pthread_mutex_t *mutex" "const struct timespec *abstime" 2782aa9de1fSMike Makonnen.Xc 2792aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires. 2802aa9de1fSMike Makonnen.It Xo 2812aa9de1fSMike Makonnen.Ft int 282d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex" 283d0353b83SRuslan Ermilov.Xc 2840f7d6847SJulian ElischerTry to lock a mutex, but don't block if the mutex is locked by another thread, 2850f7d6847SJulian Elischerincluding the current thread. 286d0353b83SRuslan Ermilov.It Xo 287d0353b83SRuslan Ermilov.Ft int 288d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex" 289d0353b83SRuslan Ermilov.Xc 2900f7d6847SJulian ElischerUnlock a mutex. 2910f7d6847SJulian Elischer.El 2920f7d6847SJulian Elischer.Sh CONDITION VARIABLE ROUTINES 2930f7d6847SJulian Elischer.Bl -tag -width Er 294d0353b83SRuslan Ermilov.It Xo 295d0353b83SRuslan Ermilov.Ft int 296d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr" 297d0353b83SRuslan Ermilov.Xc 2980f7d6847SJulian ElischerDestroy a condition variable attributes object. 299d0353b83SRuslan Ermilov.It Xo 300d0353b83SRuslan Ermilov.Ft int 301d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr" 302d378717eSMaxim Konovalov.Xc 303d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values. 304d378717eSMaxim Konovalov.It Xo 305d378717eSMaxim Konovalov.Ft int 306d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond" 307d0353b83SRuslan Ermilov.Xc 3080f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable. 309d0353b83SRuslan Ermilov.It Xo 310d0353b83SRuslan Ermilov.Ft int 311d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond" 312d0353b83SRuslan Ermilov.Xc 3130f7d6847SJulian ElischerDestroy a condition variable. 314d0353b83SRuslan Ermilov.It Xo 315d0353b83SRuslan Ermilov.Ft int 316d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr" 317d0353b83SRuslan Ermilov.Xc 3180f7d6847SJulian ElischerInitialize a condition variable with specified attributes. 319d0353b83SRuslan Ermilov.It Xo 320d0353b83SRuslan Ermilov.Ft int 321d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond" 322d0353b83SRuslan Ermilov.Xc 3230f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable. 324d0353b83SRuslan Ermilov.It Xo 325d0353b83SRuslan Ermilov.Ft int 326d0353b83SRuslan Ermilov.Fn pthread_cond_timedwait "pthread_cond_t *cond" "pthread_mutex_t *mutex" "const struct timespec *abstime" 327d0353b83SRuslan Ermilov.Xc 3280f7d6847SJulian ElischerWait no longer than the specified time for a condition and lock the specified mutex. 329d0353b83SRuslan Ermilov.It Xo 330d0353b83SRuslan Ermilov.Ft int 331d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex" 332d0353b83SRuslan Ermilov.Xc 3330f7d6847SJulian ElischerWait for a condition and lock the specified mutex. 3340f7d6847SJulian Elischer.El 335d4a76febSAlexander Langer.Sh READ/WRITE LOCK ROUTINES 336d4a76febSAlexander Langer.Bl -tag -width Er 337d0353b83SRuslan Ermilov.It Xo 338d0353b83SRuslan Ermilov.Ft int 339d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock" 340d0353b83SRuslan Ermilov.Xc 341d4a76febSAlexander LangerDestroy a read/write lock object. 342d0353b83SRuslan Ermilov.It Xo 343d0353b83SRuslan Ermilov.Ft int 344d0353b83SRuslan Ermilov.Fn pthread_rwlock_init "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr" 345d0353b83SRuslan Ermilov.Xc 346d4a76febSAlexander LangerInitialize a read/write lock object. 347d0353b83SRuslan Ermilov.It Xo 348d0353b83SRuslan Ermilov.Ft int 349d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock" 350d0353b83SRuslan Ermilov.Xc 351d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be 352d4a76febSAlexander Langeracquired. 353d0353b83SRuslan Ermilov.It Xo 354d0353b83SRuslan Ermilov.Ft int 355d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock" 356d0353b83SRuslan Ermilov.Xc 357d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the 358d4a76febSAlexander Langerlock is unavailable. 359d0353b83SRuslan Ermilov.It Xo 360d0353b83SRuslan Ermilov.Ft int 361d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock" 362d0353b83SRuslan Ermilov.Xc 363d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the 364d4a76febSAlexander Langerlock is unavailable. 365d0353b83SRuslan Ermilov.It Xo 366d0353b83SRuslan Ermilov.Ft int 367d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock" 368d0353b83SRuslan Ermilov.Xc 369d4a76febSAlexander LangerUnlock a read/write lock. 370d0353b83SRuslan Ermilov.It Xo 371d0353b83SRuslan Ermilov.Ft int 372d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock" 373d0353b83SRuslan Ermilov.Xc 374d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be 375d4a76febSAlexander Langeracquired. 376d0353b83SRuslan Ermilov.It Xo 377d0353b83SRuslan Ermilov.Ft int 378d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr" 379d0353b83SRuslan Ermilov.Xc 380d4a76febSAlexander LangerDestroy a read/write lock attribute object. 381d0353b83SRuslan Ermilov.It Xo 382d0353b83SRuslan Ermilov.Ft int 383c70db3ffSBruce Evans.Fn pthread_rwlockattr_getpshared "const pthread_rwlockattr_t *attr" "int *pshared" 384d0353b83SRuslan Ermilov.Xc 385d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute 386d4a76febSAlexander Langerobject. 387d0353b83SRuslan Ermilov.It Xo 388d0353b83SRuslan Ermilov.Ft int 389d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr" 390d0353b83SRuslan Ermilov.Xc 391d4a76febSAlexander LangerInitialize a read/write lock attribute object. 392d0353b83SRuslan Ermilov.It Xo 393d0353b83SRuslan Ermilov.Ft int 394c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared" 395d0353b83SRuslan Ermilov.Xc 396d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object. 397d4a76febSAlexander Langer.El 3980f7d6847SJulian Elischer.Sh PER-THREAD CONTEXT ROUTINES 3990f7d6847SJulian Elischer.Bl -tag -width Er 400d0353b83SRuslan Ermilov.It Xo 401d0353b83SRuslan Ermilov.Ft int 402d0353b83SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void (*routine)(void *)" 403d0353b83SRuslan Ermilov.Xc 4040f7d6847SJulian ElischerCreate a thread-specific data key. 405d0353b83SRuslan Ermilov.It Xo 406d0353b83SRuslan Ermilov.Ft int 407d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key" 408d0353b83SRuslan Ermilov.Xc 4090f7d6847SJulian ElischerDelete a thread-specific data key. 410d0353b83SRuslan Ermilov.It Xo 411d0353b83SRuslan Ermilov.Ft "void *" 412c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key" 413d0353b83SRuslan Ermilov.Xc 4140f7d6847SJulian ElischerGet the thread-specific value for the specified key. 415d0353b83SRuslan Ermilov.It Xo 416d0353b83SRuslan Ermilov.Ft int 417d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr" 418d0353b83SRuslan Ermilov.Xc 4190f7d6847SJulian ElischerSet the thread-specific value for the specified key. 4200f7d6847SJulian Elischer.El 4210f7d6847SJulian Elischer.Sh CLEANUP ROUTINES 4220f7d6847SJulian Elischer.Bl -tag -width Er 423d0353b83SRuslan Ermilov.It Xo 424d0353b83SRuslan Ermilov.Ft void 425d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute" 426d0353b83SRuslan Ermilov.Xc 4270f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup 4280f7d6847SJulian Elischerstack and optionally invoke it. 429d0353b83SRuslan Ermilov.It Xo 430d0353b83SRuslan Ermilov.Ft void 431d0353b83SRuslan Ermilov.Fn pthread_cleanup_push "void (*routine)(void *)" "void *routine_arg" 432d0353b83SRuslan Ermilov.Xc 4330f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's 4340f7d6847SJulian Elischercancellation stack. 4350f7d6847SJulian Elischer.El 4360f7d6847SJulian Elischer.Sh INSTALLATION 437b5c508fbSRuslan ErmilovThe current 438b5c508fbSRuslan Ermilov.Fx 439b5c508fbSRuslan ErmilovPOSIX thread implementation is built in the library 4400f7d6847SJulian Elischer.Fa libc_r 4410f7d6847SJulian Elischerwhich contains both thread-safe libc functions and the thread functions. 4420f7d6847SJulian ElischerThis library replaces 4430f7d6847SJulian Elischer.Fa libc 4440f7d6847SJulian Elischerfor threaded applications. 4450f7d6847SJulian Elischer.Pp 4460f7d6847SJulian ElischerBy default, 4470f7d6847SJulian Elischer.Fa libc_r 448106115b3SSteve Priceis built as part of a 'make world'. To disable the build of 4490f7d6847SJulian Elischer.Fa libc_r 450106115b3SSteve Priceyou must supply the '-DNOLIBC_R' option to 451106115b3SSteve Price.Xr make 1 . 452087ee430SJohn Birrell.Pp 453b5c508fbSRuslan ErmilovA 454b5c508fbSRuslan Ermilov.Fx 455b5c508fbSRuslan Ermilovspecific option has been added to gcc to make linking 456087ee430SJohn Birrellthreaded processes simple. 457087ee430SJohn Birrell.Fa gcc -pthread 458087ee430SJohn Birrelllinks a threaded process against 459087ee430SJohn Birrell.Fa libc_r 460087ee430SJohn Birrellinstead of 461087ee430SJohn Birrell.Fa libc . 462997d90beSBill Swingle.Sh SEE ALSO 4635521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 , 4645521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 , 465c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 , 466c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 3 , 467997d90beSBill Swingle.Xr pthread_cond_broadcast 3 , 468997d90beSBill Swingle.Xr pthread_cond_destroy 3 , 469997d90beSBill Swingle.Xr pthread_cond_init 3 , 470997d90beSBill Swingle.Xr pthread_cond_signal 3 , 471997d90beSBill Swingle.Xr pthread_cond_timedwait 3 , 472997d90beSBill Swingle.Xr pthread_cond_wait 3 , 4735521ff5aSRuslan Ermilov.Xr pthread_create 3 , 4745521ff5aSRuslan Ermilov.Xr pthread_detach 3 , 4755521ff5aSRuslan Ermilov.Xr pthread_equal 3 , 4765521ff5aSRuslan Ermilov.Xr pthread_exit 3 , 4775521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 , 4785521ff5aSRuslan Ermilov.Xr pthread_join 3 , 4795521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 , 480d378717eSMaxim Konovalov.Xr pthread_kill 3 , 481d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 , 482d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 , 483d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 , 484d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 , 485d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 , 486d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 , 487d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 , 488d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 , 489c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 , 490c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 , 491c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 , 492c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 , 493c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 , 4945521ff5aSRuslan Ermilov.Xr pthread_once 3 , 4955521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 , 4965521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 , 4975521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 , 4985521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 3 , 499997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 , 500997d90beSBill Swingle.Xr pthread_rwlock_init 3 , 501997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 , 502997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 , 503997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 , 5045521ff5aSRuslan Ermilov.Xr pthread_self 3 , 505d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 , 506d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 , 507d378717eSMaxim Konovalov.Xr pthread_setspecific 3 , 508d378717eSMaxim Konovalov.Xr pthread_testcancel 3 5090f7d6847SJulian Elischer.Sh STANDARDS 5100f7d6847SJulian ElischerThe functions in 5110f7d6847SJulian Elischer.Fa libc_r 5120f7d6847SJulian Elischerwith the 5130f7d6847SJulian Elischer.Fa pthread_ 514efc0456fSAlexander Langerprefix and not 5150f7d6847SJulian Elischer.Fa _np 516d4a76febSAlexander Langersuffix or 517d4a76febSAlexander Langer.Fa pthread_rwlock 5183c233756SRuslan Ermilovprefix conform to 5193c233756SRuslan Ermilov.St -p1003.1-96 . 5200f7d6847SJulian Elischer.Pp 5210f7d6847SJulian ElischerThe functions in libc_r with the 5220f7d6847SJulian Elischer.Fa pthread_ 5230f7d6847SJulian Elischerprefix and 5240f7d6847SJulian Elischer.Fa _np 5250f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads. 526d4a76febSAlexander Langer.Pp 527d4a76febSAlexander LangerThe functions in libc_r with the 528d4a76febSAlexander Langer.Fa pthread_rwlock 5293c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the 5303c233756SRuslan Ermilov.St -susv2 . 531