xref: /freebsd/share/man/man3/pthread.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
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.\"
31*df7d7638SFelix Johnson.Dd October 12, 2021
320f7d6847SJulian Elischer.Dt PTHREAD 3
333d45e180SRuslan Ermilov.Os
340f7d6847SJulian Elischer.Sh NAME
350f7d6847SJulian Elischer.Nm pthread
360f7d6847SJulian Elischer.Nd POSIX thread functions
375b8ef52dSSimon L. B. Nielsen.Sh LIBRARY
385b8ef52dSSimon L. B. Nielsen.Lb libpthread
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
68*df7d7638SFelix Johnson.Pp
69*df7d7638SFelix Johnson.Fx
70*df7d7638SFelix Johnsonextensions to the POSIX thread functions are summarized in
71*df7d7638SFelix Johnson.Xr pthread_np 3 .
728e750fa2SRuslan Ermilov.Ss Thread Routines
738e750fa2SRuslan Ermilov.Bl -tag -width indent
74d0353b83SRuslan Ermilov.It Xo
75d0353b83SRuslan Ermilov.Ft int
768e750fa2SRuslan Ermilov.Fo pthread_create
778e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr"
788e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg"
798e750fa2SRuslan Ermilov.Fc
80d0353b83SRuslan Ermilov.Xc
810f7d6847SJulian ElischerCreates a new thread of execution.
82d0353b83SRuslan Ermilov.It Xo
83d0353b83SRuslan Ermilov.Ft int
84d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread"
85d378717eSMaxim Konovalov.Xc
86d378717eSMaxim KonovalovCancels execution of a thread.
87d378717eSMaxim Konovalov.It Xo
88d378717eSMaxim Konovalov.Ft int
89d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread"
90d0353b83SRuslan Ermilov.Xc
910f7d6847SJulian ElischerMarks a thread for deletion.
92d0353b83SRuslan Ermilov.It Xo
93d0353b83SRuslan Ermilov.Ft int
94d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2"
95d0353b83SRuslan Ermilov.Xc
960f7d6847SJulian ElischerCompares two thread IDs.
97d0353b83SRuslan Ermilov.It Xo
98d0353b83SRuslan Ermilov.Ft void
99d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr"
100d0353b83SRuslan Ermilov.Xc
1010f7d6847SJulian ElischerTerminates the calling thread.
102d0353b83SRuslan Ermilov.It Xo
103d0353b83SRuslan Ermilov.Ft int
104d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr"
105d0353b83SRuslan Ermilov.Xc
1060f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread.
107d0353b83SRuslan Ermilov.It Xo
108d0353b83SRuslan Ermilov.Ft int
109d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig"
110d0353b83SRuslan Ermilov.Xc
111d378717eSMaxim KonovalovDelivers a signal to a specified thread.
112d0353b83SRuslan Ermilov.It Xo
113d0353b83SRuslan Ermilov.Ft int
1148e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]"
115d0353b83SRuslan Ermilov.Xc
1160f7d6847SJulian ElischerCalls an initialization routine once.
117d0353b83SRuslan Ermilov.It Xo
118d0353b83SRuslan Ermilov.Ft pthread_t
119d0353b83SRuslan Ermilov.Fn pthread_self void
120d0353b83SRuslan Ermilov.Xc
1210f7d6847SJulian ElischerReturns the thread ID of the calling thread.
122d378717eSMaxim Konovalov.It Xo
123d378717eSMaxim Konovalov.Ft int
124d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate"
125d378717eSMaxim Konovalov.Xc
126d378717eSMaxim KonovalovSets the current thread's cancelability state.
127d378717eSMaxim Konovalov.It Xo
128d378717eSMaxim Konovalov.Ft int
129d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype"
130d378717eSMaxim Konovalov.Xc
131d378717eSMaxim KonovalovSets the current thread's cancelability type.
132d378717eSMaxim Konovalov.It Xo
133d378717eSMaxim Konovalov.Ft void
134d378717eSMaxim Konovalov.Fn pthread_testcancel void
135d378717eSMaxim Konovalov.Xc
136d378717eSMaxim KonovalovCreates a cancellation point in the calling thread.
137d378717eSMaxim Konovalov.It Xo
138d378717eSMaxim Konovalov.Ft void
139d378717eSMaxim Konovalov.Fn pthread_yield void
140d378717eSMaxim Konovalov.Xc
141d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one.
1420f7d6847SJulian Elischer.El
1438e750fa2SRuslan Ermilov.Ss Attribute Object Routines
1448e750fa2SRuslan Ermilov.Bl -tag -width indent
145d0353b83SRuslan Ermilov.It Xo
146d0353b83SRuslan Ermilov.Ft int
147d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr"
148d0353b83SRuslan Ermilov.Xc
1490f7d6847SJulian ElischerDestroy a thread attributes object.
150d0353b83SRuslan Ermilov.It Xo
151d0353b83SRuslan Ermilov.Ft int
1528e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched
1538e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched"
1548e750fa2SRuslan Ermilov.Fc
155d0353b83SRuslan Ermilov.Xc
1560f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object.
157d0353b83SRuslan Ermilov.It Xo
158d0353b83SRuslan Ermilov.Ft int
1598e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam
1608e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param"
1618e750fa2SRuslan Ermilov.Fc
162d0353b83SRuslan Ermilov.Xc
1630f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object.
164d0353b83SRuslan Ermilov.It Xo
165d0353b83SRuslan Ermilov.Ft int
166c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy"
167d0353b83SRuslan Ermilov.Xc
1680f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object.
169d0353b83SRuslan Ermilov.It Xo
170d0353b83SRuslan Ermilov.Ft int
171c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope"
172d0353b83SRuslan Ermilov.Xc
1730f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object.
174d0353b83SRuslan Ermilov.It Xo
175d0353b83SRuslan Ermilov.Ft int
176c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize"
177d0353b83SRuslan Ermilov.Xc
1780f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object.
179d0353b83SRuslan Ermilov.It Xo
180d0353b83SRuslan Ermilov.Ft int
181c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr"
182d0353b83SRuslan Ermilov.Xc
1830f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object.
184d0353b83SRuslan Ermilov.It Xo
185d0353b83SRuslan Ermilov.Ft int
186c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate"
187d0353b83SRuslan Ermilov.Xc
1880f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object.
189d0353b83SRuslan Ermilov.It Xo
190d0353b83SRuslan Ermilov.Ft int
191d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr"
192d0353b83SRuslan Ermilov.Xc
1930f7d6847SJulian ElischerInitialize a thread attributes object with default values.
194d0353b83SRuslan Ermilov.It Xo
195d0353b83SRuslan Ermilov.Ft int
196d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched"
197d0353b83SRuslan Ermilov.Xc
1980f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object.
199d0353b83SRuslan Ermilov.It Xo
200d0353b83SRuslan Ermilov.Ft int
2018e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam
2028e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param"
2038e750fa2SRuslan Ermilov.Fc
204d0353b83SRuslan Ermilov.Xc
2050f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object.
206d0353b83SRuslan Ermilov.It Xo
207d0353b83SRuslan Ermilov.Ft int
208d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy"
209d0353b83SRuslan Ermilov.Xc
2100f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object.
211d0353b83SRuslan Ermilov.It Xo
212d0353b83SRuslan Ermilov.Ft int
213d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope"
214d0353b83SRuslan Ermilov.Xc
2150f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object.
216d0353b83SRuslan Ermilov.It Xo
217d0353b83SRuslan Ermilov.Ft int
218d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize"
219d0353b83SRuslan Ermilov.Xc
2200f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object.
221d0353b83SRuslan Ermilov.It Xo
222d0353b83SRuslan Ermilov.Ft int
223d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr"
224d0353b83SRuslan Ermilov.Xc
2250f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object.
226d0353b83SRuslan Ermilov.It Xo
227d0353b83SRuslan Ermilov.Ft int
228d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate"
229d0353b83SRuslan Ermilov.Xc
2300f7d6847SJulian ElischerSet the detach state in a thread attributes object.
2310f7d6847SJulian Elischer.El
2328e750fa2SRuslan Ermilov.Ss Mutex Routines
2338e750fa2SRuslan Ermilov.Bl -tag -width indent
234d0353b83SRuslan Ermilov.It Xo
235d0353b83SRuslan Ermilov.Ft int
236d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr"
237d0353b83SRuslan Ermilov.Xc
2380f7d6847SJulian ElischerDestroy a mutex attributes object.
239d0353b83SRuslan Ermilov.It Xo
240d0353b83SRuslan Ermilov.Ft int
241b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprioceiling "const pthread_mutexattr_t *restrict attr" "int *restrict ceiling"
242d378717eSMaxim Konovalov.Xc
243d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object.
244d378717eSMaxim Konovalov.It Xo
245d378717eSMaxim Konovalov.Ft int
246b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprotocol "const pthread_mutexattr_t *restrict attr" "int *restrict protocol"
247d378717eSMaxim Konovalov.Xc
248d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object.
249d378717eSMaxim Konovalov.It Xo
250d378717eSMaxim Konovalov.Ft int
251b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_gettype "const pthread_mutexattr_t *restrict attr" "int *restrict type"
252d378717eSMaxim Konovalov.Xc
253d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object.
254d378717eSMaxim Konovalov.It Xo
255d378717eSMaxim Konovalov.Ft int
256d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr"
257d0353b83SRuslan Ermilov.Xc
2580f7d6847SJulian ElischerInitialize a mutex attributes object with default values.
259d0353b83SRuslan Ermilov.It Xo
260d0353b83SRuslan Ermilov.Ft int
261d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling"
262d378717eSMaxim Konovalov.Xc
263d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object.
264d378717eSMaxim Konovalov.It Xo
265d378717eSMaxim Konovalov.Ft int
266d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol"
267d378717eSMaxim Konovalov.Xc
268d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object.
269d378717eSMaxim Konovalov.It Xo
270d378717eSMaxim Konovalov.Ft int
271d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type"
272d378717eSMaxim Konovalov.Xc
273d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created.
274d378717eSMaxim Konovalov.It Xo
275d378717eSMaxim Konovalov.Ft int
276d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex"
277d0353b83SRuslan Ermilov.Xc
2780f7d6847SJulian ElischerDestroy a mutex.
279d0353b83SRuslan Ermilov.It Xo
280d0353b83SRuslan Ermilov.Ft int
2818e750fa2SRuslan Ermilov.Fo pthread_mutex_init
2828e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr"
2838e750fa2SRuslan Ermilov.Fc
284d0353b83SRuslan Ermilov.Xc
285dfb9495bSTim VanderhoekInitialize a mutex with specified attributes.
286d0353b83SRuslan Ermilov.It Xo
287d0353b83SRuslan Ermilov.Ft int
288d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex"
289d0353b83SRuslan Ermilov.Xc
2900f7d6847SJulian ElischerLock a mutex and block until it becomes available.
291d0353b83SRuslan Ermilov.It Xo
292d0353b83SRuslan Ermilov.Ft int
2938e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock
2948e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime"
2958e750fa2SRuslan Ermilov.Fc
2962aa9de1fSMike Makonnen.Xc
2972aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires.
2982aa9de1fSMike Makonnen.It Xo
2992aa9de1fSMike Makonnen.Ft int
300d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex"
301d0353b83SRuslan Ermilov.Xc
3020227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread,
3030f7d6847SJulian Elischerincluding the current thread.
304d0353b83SRuslan Ermilov.It Xo
305d0353b83SRuslan Ermilov.Ft int
306d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex"
307d0353b83SRuslan Ermilov.Xc
3080f7d6847SJulian ElischerUnlock a mutex.
3090f7d6847SJulian Elischer.El
3108e750fa2SRuslan Ermilov.Ss Condition Variable Routines
3118e750fa2SRuslan Ermilov.Bl -tag -width indent
312d0353b83SRuslan Ermilov.It Xo
313d0353b83SRuslan Ermilov.Ft int
314d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr"
315d0353b83SRuslan Ermilov.Xc
3160f7d6847SJulian ElischerDestroy a condition variable attributes object.
317d0353b83SRuslan Ermilov.It Xo
318d0353b83SRuslan Ermilov.Ft int
319d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr"
320d378717eSMaxim Konovalov.Xc
321d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values.
322d378717eSMaxim Konovalov.It Xo
323d378717eSMaxim Konovalov.Ft int
324d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond"
325d0353b83SRuslan Ermilov.Xc
3260f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable.
327d0353b83SRuslan Ermilov.It Xo
328d0353b83SRuslan Ermilov.Ft int
329d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond"
330d0353b83SRuslan Ermilov.Xc
3310f7d6847SJulian ElischerDestroy a condition variable.
332d0353b83SRuslan Ermilov.It Xo
333d0353b83SRuslan Ermilov.Ft int
334d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr"
335d0353b83SRuslan Ermilov.Xc
3360f7d6847SJulian ElischerInitialize a condition variable with specified attributes.
337d0353b83SRuslan Ermilov.It Xo
338d0353b83SRuslan Ermilov.Ft int
339d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond"
340d0353b83SRuslan Ermilov.Xc
3410f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable.
342d0353b83SRuslan Ermilov.It Xo
343d0353b83SRuslan Ermilov.Ft int
3448e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait
3458e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex"
3468e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime"
3478e750fa2SRuslan Ermilov.Fc
348d0353b83SRuslan Ermilov.Xc
34909e90f51SGavin AtkinsonUnlock the specified mutex, wait no longer than the specified time for
35009e90f51SGavin Atkinsona condition, and then relock the mutex.
351d0353b83SRuslan Ermilov.It Xo
352d0353b83SRuslan Ermilov.Ft int
353d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex"
354d0353b83SRuslan Ermilov.Xc
35509e90f51SGavin AtkinsonUnlock the specified mutex, wait for a condition, and relock the mutex.
3560f7d6847SJulian Elischer.El
3578e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines
3588e750fa2SRuslan Ermilov.Bl -tag -width indent
359d0353b83SRuslan Ermilov.It Xo
360d0353b83SRuslan Ermilov.Ft int
361d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock"
362d0353b83SRuslan Ermilov.Xc
363d4a76febSAlexander LangerDestroy a read/write lock object.
364d0353b83SRuslan Ermilov.It Xo
365d0353b83SRuslan Ermilov.Ft int
3668e750fa2SRuslan Ermilov.Fo pthread_rwlock_init
3678e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr"
3688e750fa2SRuslan Ermilov.Fc
369d0353b83SRuslan Ermilov.Xc
370d4a76febSAlexander LangerInitialize a read/write lock object.
371d0353b83SRuslan Ermilov.It Xo
372d0353b83SRuslan Ermilov.Ft int
373d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock"
374d0353b83SRuslan Ermilov.Xc
375d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be
376d4a76febSAlexander Langeracquired.
377d0353b83SRuslan Ermilov.It Xo
378d0353b83SRuslan Ermilov.Ft int
379d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock"
380d0353b83SRuslan Ermilov.Xc
381d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the
382d4a76febSAlexander Langerlock is unavailable.
383d0353b83SRuslan Ermilov.It Xo
384d0353b83SRuslan Ermilov.Ft int
385d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock"
386d0353b83SRuslan Ermilov.Xc
387d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the
388d4a76febSAlexander Langerlock is unavailable.
389d0353b83SRuslan Ermilov.It Xo
390d0353b83SRuslan Ermilov.Ft int
391d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock"
392d0353b83SRuslan Ermilov.Xc
393d4a76febSAlexander LangerUnlock a read/write lock.
394d0353b83SRuslan Ermilov.It Xo
395d0353b83SRuslan Ermilov.Ft int
396d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock"
397d0353b83SRuslan Ermilov.Xc
398d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be
399d4a76febSAlexander Langeracquired.
400d0353b83SRuslan Ermilov.It Xo
401d0353b83SRuslan Ermilov.Ft int
402d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr"
403d0353b83SRuslan Ermilov.Xc
404d4a76febSAlexander LangerDestroy a read/write lock attribute object.
405d0353b83SRuslan Ermilov.It Xo
406d0353b83SRuslan Ermilov.Ft int
4078e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared
4088e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared"
4098e750fa2SRuslan Ermilov.Fc
410d0353b83SRuslan Ermilov.Xc
411d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute
412d4a76febSAlexander Langerobject.
413d0353b83SRuslan Ermilov.It Xo
414d0353b83SRuslan Ermilov.Ft int
415d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr"
416d0353b83SRuslan Ermilov.Xc
417d4a76febSAlexander LangerInitialize a read/write lock attribute object.
418d0353b83SRuslan Ermilov.It Xo
419d0353b83SRuslan Ermilov.Ft int
420c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared"
421d0353b83SRuslan Ermilov.Xc
422d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object.
423d4a76febSAlexander Langer.El
4248e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines
4258e750fa2SRuslan Ermilov.Bl -tag -width indent
426d0353b83SRuslan Ermilov.It Xo
427d0353b83SRuslan Ermilov.Ft int
4288e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]"
429d0353b83SRuslan Ermilov.Xc
4300f7d6847SJulian ElischerCreate a thread-specific data key.
431d0353b83SRuslan Ermilov.It Xo
432d0353b83SRuslan Ermilov.Ft int
433d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key"
434d0353b83SRuslan Ermilov.Xc
4350f7d6847SJulian ElischerDelete a thread-specific data key.
436d0353b83SRuslan Ermilov.It Xo
437d0353b83SRuslan Ermilov.Ft "void *"
438c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key"
439d0353b83SRuslan Ermilov.Xc
4400f7d6847SJulian ElischerGet the thread-specific value for the specified key.
441d0353b83SRuslan Ermilov.It Xo
442d0353b83SRuslan Ermilov.Ft int
443d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr"
444d0353b83SRuslan Ermilov.Xc
4450f7d6847SJulian ElischerSet the thread-specific value for the specified key.
4460f7d6847SJulian Elischer.El
4478e750fa2SRuslan Ermilov.Ss Cleanup Routines
4488e750fa2SRuslan Ermilov.Bl -tag -width indent
449d0353b83SRuslan Ermilov.It Xo
450a3c8fc53SGiorgos Keramidas.Ft int
451a3c8fc53SGiorgos Keramidas.Fo pthread_atfork
452a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]"
453a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]"
454a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]"
455a3c8fc53SGiorgos Keramidas.Fc
456a3c8fc53SGiorgos Keramidas.Xc
457a3fb6da9SGlen BarberRegister fork handlers.
458a3c8fc53SGiorgos Keramidas.It Xo
459d0353b83SRuslan Ermilov.Ft void
460d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute"
461d0353b83SRuslan Ermilov.Xc
4620f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup
4630f7d6847SJulian Elischerstack and optionally invoke it.
464d0353b83SRuslan Ermilov.It Xo
465d0353b83SRuslan Ermilov.Ft void
4668e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg"
467d0353b83SRuslan Ermilov.Xc
4680f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's
4690f7d6847SJulian Elischercancellation stack.
4700f7d6847SJulian Elischer.El
4713e9ed1efSRuslan Ermilov.Sh IMPLEMENTATION NOTES
472b5c508fbSRuslan ErmilovThe current
473b5c508fbSRuslan Ermilov.Fx
4749c0f9817STom RhodesPOSIX thread implementation is built into the
4757ba7e041STom Rhodes.Lb libthr
4769c0f9817STom Rhodeslibrary.
4779c0f9817STom RhodesIt contains thread-safe versions of
478c133f2abSRuslan Ermilov.Lb libc
479c133f2abSRuslan Ermilovfunctions and the thread functions.
4809c0f9817STom RhodesThreaded applications are linked with this library.
481997d90beSBill Swingle.Sh SEE ALSO
4829c0f9817STom Rhodes.Xr libthr 3 ,
483a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 ,
484777f8cebSXin LI.Xr pthread_attr 3 ,
485c3f5198bSOlivier Houchard.Xr pthread_cancel 3 ,
4865521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 ,
4875521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 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 ,
494e52a1af2SBaptiste Daroussin.Xr pthread_condattr_destroy 3 ,
495e52a1af2SBaptiste Daroussin.Xr pthread_condattr_init 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 ,
504e52a1af2SBaptiste Daroussin.Xr pthread_mutex_destroy 3 ,
505e52a1af2SBaptiste Daroussin.Xr pthread_mutex_init 3 ,
506e52a1af2SBaptiste Daroussin.Xr pthread_mutex_lock 3 ,
507e52a1af2SBaptiste Daroussin.Xr pthread_mutex_trylock 3 ,
508e52a1af2SBaptiste Daroussin.Xr pthread_mutex_unlock 3 ,
509d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 ,
510d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 ,
511d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 ,
512d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 ,
513d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 ,
514d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 ,
515d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 ,
516d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 ,
517*df7d7638SFelix Johnson.Xr pthread_np 3 ,
5185521ff5aSRuslan Ermilov.Xr pthread_once 3 ,
519997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 ,
520997d90beSBill Swingle.Xr pthread_rwlock_init 3 ,
521997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 ,
522997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 ,
523997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 ,
524e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_destroy 3 ,
525e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_getpshared 3 ,
526e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_init 3 ,
527e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_setpshared 3 ,
5285521ff5aSRuslan Ermilov.Xr pthread_self 3 ,
529d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 ,
530d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 ,
531d378717eSMaxim Konovalov.Xr pthread_setspecific 3 ,
532d378717eSMaxim Konovalov.Xr pthread_testcancel 3
5330f7d6847SJulian Elischer.Sh STANDARDS
534c133f2abSRuslan ErmilovThe functions with the
535c133f2abSRuslan Ermilov.Nm pthread_
536efc0456fSAlexander Langerprefix and not
537c133f2abSRuslan Ermilov.Nm _np
538d4a76febSAlexander Langersuffix or
539c133f2abSRuslan Ermilov.Nm pthread_rwlock
5403c233756SRuslan Ermilovprefix conform to
5413c233756SRuslan Ermilov.St -p1003.1-96 .
5420f7d6847SJulian Elischer.Pp
543c133f2abSRuslan ErmilovThe functions with the
544c133f2abSRuslan Ermilov.Nm pthread_
5450f7d6847SJulian Elischerprefix and
546c133f2abSRuslan Ermilov.Nm _np
5470f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads.
548d4a76febSAlexander Langer.Pp
549c133f2abSRuslan ErmilovThe functions with the
550c133f2abSRuslan Ermilov.Nm pthread_rwlock
5513c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the
5523c233756SRuslan Ermilov.St -susv2 .
553