xref: /freebsd/share/man/man3/pthread.3 (revision df7d763849655f4038428f97804bf7324d801684)
10f7d6847SJulian Elischer.\" Copyright (c) 1996 John Birrell <jb@cimlogic.com.au>.
20f7d6847SJulian Elischer.\" All rights reserved.
30f7d6847SJulian Elischer.\"
40f7d6847SJulian Elischer.\" Redistribution and use in source and binary forms, with or without
50f7d6847SJulian Elischer.\" modification, are permitted provided that the following conditions
60f7d6847SJulian Elischer.\" are met:
70f7d6847SJulian Elischer.\" 1. Redistributions of source code must retain the above copyright
80f7d6847SJulian Elischer.\"    notice, this list of conditions and the following disclaimer.
90f7d6847SJulian Elischer.\" 2. Redistributions in binary form must reproduce the above copyright
100f7d6847SJulian Elischer.\"    notice, this list of conditions and the following disclaimer in the
110f7d6847SJulian Elischer.\"    documentation and/or other materials provided with the distribution.
120f7d6847SJulian Elischer.\" 3. All advertising materials mentioning features or use of this software
130f7d6847SJulian Elischer.\"    must display the following acknowledgement:
140f7d6847SJulian Elischer.\"	This product includes software developed by John Birrell.
150f7d6847SJulian Elischer.\" 4. Neither the name of the author nor the names of any co-contributors
160f7d6847SJulian Elischer.\"    may be used to endorse or promote products derived from this software
170f7d6847SJulian Elischer.\"    without specific prior written permission.
180f7d6847SJulian Elischer.\"
190f7d6847SJulian Elischer.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
200f7d6847SJulian Elischer.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
210f7d6847SJulian Elischer.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
220f7d6847SJulian Elischer.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
230f7d6847SJulian Elischer.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
240f7d6847SJulian Elischer.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
250f7d6847SJulian Elischer.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
260f7d6847SJulian Elischer.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
270f7d6847SJulian Elischer.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
280f7d6847SJulian Elischer.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
290f7d6847SJulian Elischer.\" SUCH DAMAGE.
300f7d6847SJulian Elischer.\"
317f3dea24SPeter Wemm.\" $FreeBSD$
32ac5afce1SJohn-Mark Gurney.\"
33*df7d7638SFelix Johnson.Dd October 12, 2021
340f7d6847SJulian Elischer.Dt PTHREAD 3
353d45e180SRuslan Ermilov.Os
360f7d6847SJulian Elischer.Sh NAME
370f7d6847SJulian Elischer.Nm pthread
380f7d6847SJulian Elischer.Nd POSIX thread functions
395b8ef52dSSimon L. B. Nielsen.Sh LIBRARY
405b8ef52dSSimon L. B. Nielsen.Lb libpthread
41c70db3ffSBruce Evans.Sh SYNOPSIS
4232eef9aeSRuslan Ermilov.In pthread.h
430f7d6847SJulian Elischer.Sh DESCRIPTION
440f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with
450f7d6847SJulian Elischerrequirements for multiple flows of control, called
468e750fa2SRuslan Ermilov.Em threads ,
476d249eeeSSheldon Hearnwithin a process.
486d249eeeSSheldon HearnMultithreading is used to improve the performance of a
490f7d6847SJulian Elischerprogram.
500f7d6847SJulian Elischer.Pp
510f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following
520f7d6847SJulian Elischergroups:
538e750fa2SRuslan Ermilov.Pp
548e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact
550f7d6847SJulian Elischer.It
56d4a76febSAlexander LangerThread Routines
570f7d6847SJulian Elischer.It
580f7d6847SJulian ElischerAttribute Object Routines
590f7d6847SJulian Elischer.It
600f7d6847SJulian ElischerMutex Routines
610f7d6847SJulian Elischer.It
620f7d6847SJulian ElischerCondition Variable Routines
630f7d6847SJulian Elischer.It
64d4a76febSAlexander LangerRead/Write Lock Routines
65d4a76febSAlexander Langer.It
660f7d6847SJulian ElischerPer-Thread Context Routines
670f7d6847SJulian Elischer.It
680f7d6847SJulian ElischerCleanup Routines
690f7d6847SJulian Elischer.El
70*df7d7638SFelix Johnson.Pp
71*df7d7638SFelix Johnson.Fx
72*df7d7638SFelix Johnsonextensions to the POSIX thread functions are summarized in
73*df7d7638SFelix Johnson.Xr pthread_np 3 .
748e750fa2SRuslan Ermilov.Ss Thread Routines
758e750fa2SRuslan Ermilov.Bl -tag -width indent
76d0353b83SRuslan Ermilov.It Xo
77d0353b83SRuslan Ermilov.Ft int
788e750fa2SRuslan Ermilov.Fo pthread_create
798e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr"
808e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg"
818e750fa2SRuslan Ermilov.Fc
82d0353b83SRuslan Ermilov.Xc
830f7d6847SJulian ElischerCreates a new thread of execution.
84d0353b83SRuslan Ermilov.It Xo
85d0353b83SRuslan Ermilov.Ft int
86d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread"
87d378717eSMaxim Konovalov.Xc
88d378717eSMaxim KonovalovCancels execution of a thread.
89d378717eSMaxim Konovalov.It Xo
90d378717eSMaxim Konovalov.Ft int
91d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread"
92d0353b83SRuslan Ermilov.Xc
930f7d6847SJulian ElischerMarks a thread for deletion.
94d0353b83SRuslan Ermilov.It Xo
95d0353b83SRuslan Ermilov.Ft int
96d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2"
97d0353b83SRuslan Ermilov.Xc
980f7d6847SJulian ElischerCompares two thread IDs.
99d0353b83SRuslan Ermilov.It Xo
100d0353b83SRuslan Ermilov.Ft void
101d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr"
102d0353b83SRuslan Ermilov.Xc
1030f7d6847SJulian ElischerTerminates the calling thread.
104d0353b83SRuslan Ermilov.It Xo
105d0353b83SRuslan Ermilov.Ft int
106d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr"
107d0353b83SRuslan Ermilov.Xc
1080f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread.
109d0353b83SRuslan Ermilov.It Xo
110d0353b83SRuslan Ermilov.Ft int
111d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig"
112d0353b83SRuslan Ermilov.Xc
113d378717eSMaxim KonovalovDelivers a signal to a specified thread.
114d0353b83SRuslan Ermilov.It Xo
115d0353b83SRuslan Ermilov.Ft int
1168e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]"
117d0353b83SRuslan Ermilov.Xc
1180f7d6847SJulian ElischerCalls an initialization routine once.
119d0353b83SRuslan Ermilov.It Xo
120d0353b83SRuslan Ermilov.Ft pthread_t
121d0353b83SRuslan Ermilov.Fn pthread_self void
122d0353b83SRuslan Ermilov.Xc
1230f7d6847SJulian ElischerReturns the thread ID of the calling thread.
124d378717eSMaxim Konovalov.It Xo
125d378717eSMaxim Konovalov.Ft int
126d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate"
127d378717eSMaxim Konovalov.Xc
128d378717eSMaxim KonovalovSets the current thread's cancelability state.
129d378717eSMaxim Konovalov.It Xo
130d378717eSMaxim Konovalov.Ft int
131d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype"
132d378717eSMaxim Konovalov.Xc
133d378717eSMaxim KonovalovSets the current thread's cancelability type.
134d378717eSMaxim Konovalov.It Xo
135d378717eSMaxim Konovalov.Ft void
136d378717eSMaxim Konovalov.Fn pthread_testcancel void
137d378717eSMaxim Konovalov.Xc
138d378717eSMaxim KonovalovCreates a cancellation point in the calling thread.
139d378717eSMaxim Konovalov.It Xo
140d378717eSMaxim Konovalov.Ft void
141d378717eSMaxim Konovalov.Fn pthread_yield void
142d378717eSMaxim Konovalov.Xc
143d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one.
1440f7d6847SJulian Elischer.El
1458e750fa2SRuslan Ermilov.Ss Attribute Object Routines
1468e750fa2SRuslan Ermilov.Bl -tag -width indent
147d0353b83SRuslan Ermilov.It Xo
148d0353b83SRuslan Ermilov.Ft int
149d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr"
150d0353b83SRuslan Ermilov.Xc
1510f7d6847SJulian ElischerDestroy a thread attributes object.
152d0353b83SRuslan Ermilov.It Xo
153d0353b83SRuslan Ermilov.Ft int
1548e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched
1558e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched"
1568e750fa2SRuslan Ermilov.Fc
157d0353b83SRuslan Ermilov.Xc
1580f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object.
159d0353b83SRuslan Ermilov.It Xo
160d0353b83SRuslan Ermilov.Ft int
1618e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam
1628e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param"
1638e750fa2SRuslan Ermilov.Fc
164d0353b83SRuslan Ermilov.Xc
1650f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object.
166d0353b83SRuslan Ermilov.It Xo
167d0353b83SRuslan Ermilov.Ft int
168c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy"
169d0353b83SRuslan Ermilov.Xc
1700f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object.
171d0353b83SRuslan Ermilov.It Xo
172d0353b83SRuslan Ermilov.Ft int
173c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope"
174d0353b83SRuslan Ermilov.Xc
1750f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object.
176d0353b83SRuslan Ermilov.It Xo
177d0353b83SRuslan Ermilov.Ft int
178c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize"
179d0353b83SRuslan Ermilov.Xc
1800f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object.
181d0353b83SRuslan Ermilov.It Xo
182d0353b83SRuslan Ermilov.Ft int
183c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr"
184d0353b83SRuslan Ermilov.Xc
1850f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object.
186d0353b83SRuslan Ermilov.It Xo
187d0353b83SRuslan Ermilov.Ft int
188c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate"
189d0353b83SRuslan Ermilov.Xc
1900f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object.
191d0353b83SRuslan Ermilov.It Xo
192d0353b83SRuslan Ermilov.Ft int
193d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr"
194d0353b83SRuslan Ermilov.Xc
1950f7d6847SJulian ElischerInitialize a thread attributes object with default values.
196d0353b83SRuslan Ermilov.It Xo
197d0353b83SRuslan Ermilov.Ft int
198d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched"
199d0353b83SRuslan Ermilov.Xc
2000f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object.
201d0353b83SRuslan Ermilov.It Xo
202d0353b83SRuslan Ermilov.Ft int
2038e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam
2048e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param"
2058e750fa2SRuslan Ermilov.Fc
206d0353b83SRuslan Ermilov.Xc
2070f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object.
208d0353b83SRuslan Ermilov.It Xo
209d0353b83SRuslan Ermilov.Ft int
210d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy"
211d0353b83SRuslan Ermilov.Xc
2120f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object.
213d0353b83SRuslan Ermilov.It Xo
214d0353b83SRuslan Ermilov.Ft int
215d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope"
216d0353b83SRuslan Ermilov.Xc
2170f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object.
218d0353b83SRuslan Ermilov.It Xo
219d0353b83SRuslan Ermilov.Ft int
220d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize"
221d0353b83SRuslan Ermilov.Xc
2220f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object.
223d0353b83SRuslan Ermilov.It Xo
224d0353b83SRuslan Ermilov.Ft int
225d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr"
226d0353b83SRuslan Ermilov.Xc
2270f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object.
228d0353b83SRuslan Ermilov.It Xo
229d0353b83SRuslan Ermilov.Ft int
230d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate"
231d0353b83SRuslan Ermilov.Xc
2320f7d6847SJulian ElischerSet the detach state in a thread attributes object.
2330f7d6847SJulian Elischer.El
2348e750fa2SRuslan Ermilov.Ss Mutex Routines
2358e750fa2SRuslan Ermilov.Bl -tag -width indent
236d0353b83SRuslan Ermilov.It Xo
237d0353b83SRuslan Ermilov.Ft int
238d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr"
239d0353b83SRuslan Ermilov.Xc
2400f7d6847SJulian ElischerDestroy a mutex attributes object.
241d0353b83SRuslan Ermilov.It Xo
242d0353b83SRuslan Ermilov.Ft int
243b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprioceiling "const pthread_mutexattr_t *restrict attr" "int *restrict ceiling"
244d378717eSMaxim Konovalov.Xc
245d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object.
246d378717eSMaxim Konovalov.It Xo
247d378717eSMaxim Konovalov.Ft int
248b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_getprotocol "const pthread_mutexattr_t *restrict attr" "int *restrict protocol"
249d378717eSMaxim Konovalov.Xc
250d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object.
251d378717eSMaxim Konovalov.It Xo
252d378717eSMaxim Konovalov.Ft int
253b6413b6dSPedro F. Giffuni.Fn pthread_mutexattr_gettype "const pthread_mutexattr_t *restrict attr" "int *restrict type"
254d378717eSMaxim Konovalov.Xc
255d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object.
256d378717eSMaxim Konovalov.It Xo
257d378717eSMaxim Konovalov.Ft int
258d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr"
259d0353b83SRuslan Ermilov.Xc
2600f7d6847SJulian ElischerInitialize a mutex attributes object with default values.
261d0353b83SRuslan Ermilov.It Xo
262d0353b83SRuslan Ermilov.Ft int
263d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling"
264d378717eSMaxim Konovalov.Xc
265d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object.
266d378717eSMaxim Konovalov.It Xo
267d378717eSMaxim Konovalov.Ft int
268d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol"
269d378717eSMaxim Konovalov.Xc
270d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object.
271d378717eSMaxim Konovalov.It Xo
272d378717eSMaxim Konovalov.Ft int
273d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type"
274d378717eSMaxim Konovalov.Xc
275d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created.
276d378717eSMaxim Konovalov.It Xo
277d378717eSMaxim Konovalov.Ft int
278d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex"
279d0353b83SRuslan Ermilov.Xc
2800f7d6847SJulian ElischerDestroy a mutex.
281d0353b83SRuslan Ermilov.It Xo
282d0353b83SRuslan Ermilov.Ft int
2838e750fa2SRuslan Ermilov.Fo pthread_mutex_init
2848e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr"
2858e750fa2SRuslan Ermilov.Fc
286d0353b83SRuslan Ermilov.Xc
287dfb9495bSTim VanderhoekInitialize a mutex with specified attributes.
288d0353b83SRuslan Ermilov.It Xo
289d0353b83SRuslan Ermilov.Ft int
290d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex"
291d0353b83SRuslan Ermilov.Xc
2920f7d6847SJulian ElischerLock a mutex and block until it becomes available.
293d0353b83SRuslan Ermilov.It Xo
294d0353b83SRuslan Ermilov.Ft int
2958e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock
2968e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime"
2978e750fa2SRuslan Ermilov.Fc
2982aa9de1fSMike Makonnen.Xc
2992aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires.
3002aa9de1fSMike Makonnen.It Xo
3012aa9de1fSMike Makonnen.Ft int
302d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex"
303d0353b83SRuslan Ermilov.Xc
3040227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread,
3050f7d6847SJulian Elischerincluding the current thread.
306d0353b83SRuslan Ermilov.It Xo
307d0353b83SRuslan Ermilov.Ft int
308d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex"
309d0353b83SRuslan Ermilov.Xc
3100f7d6847SJulian ElischerUnlock a mutex.
3110f7d6847SJulian Elischer.El
3128e750fa2SRuslan Ermilov.Ss Condition Variable Routines
3138e750fa2SRuslan Ermilov.Bl -tag -width indent
314d0353b83SRuslan Ermilov.It Xo
315d0353b83SRuslan Ermilov.Ft int
316d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr"
317d0353b83SRuslan Ermilov.Xc
3180f7d6847SJulian ElischerDestroy a condition variable attributes object.
319d0353b83SRuslan Ermilov.It Xo
320d0353b83SRuslan Ermilov.Ft int
321d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr"
322d378717eSMaxim Konovalov.Xc
323d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values.
324d378717eSMaxim Konovalov.It Xo
325d378717eSMaxim Konovalov.Ft int
326d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond"
327d0353b83SRuslan Ermilov.Xc
3280f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable.
329d0353b83SRuslan Ermilov.It Xo
330d0353b83SRuslan Ermilov.Ft int
331d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond"
332d0353b83SRuslan Ermilov.Xc
3330f7d6847SJulian ElischerDestroy a condition variable.
334d0353b83SRuslan Ermilov.It Xo
335d0353b83SRuslan Ermilov.Ft int
336d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr"
337d0353b83SRuslan Ermilov.Xc
3380f7d6847SJulian ElischerInitialize a condition variable with specified attributes.
339d0353b83SRuslan Ermilov.It Xo
340d0353b83SRuslan Ermilov.Ft int
341d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond"
342d0353b83SRuslan Ermilov.Xc
3430f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable.
344d0353b83SRuslan Ermilov.It Xo
345d0353b83SRuslan Ermilov.Ft int
3468e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait
3478e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex"
3488e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime"
3498e750fa2SRuslan Ermilov.Fc
350d0353b83SRuslan Ermilov.Xc
35109e90f51SGavin AtkinsonUnlock the specified mutex, wait no longer than the specified time for
35209e90f51SGavin Atkinsona condition, and then relock the mutex.
353d0353b83SRuslan Ermilov.It Xo
354d0353b83SRuslan Ermilov.Ft int
355d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex"
356d0353b83SRuslan Ermilov.Xc
35709e90f51SGavin AtkinsonUnlock the specified mutex, wait for a condition, and relock the mutex.
3580f7d6847SJulian Elischer.El
3598e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines
3608e750fa2SRuslan Ermilov.Bl -tag -width indent
361d0353b83SRuslan Ermilov.It Xo
362d0353b83SRuslan Ermilov.Ft int
363d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock"
364d0353b83SRuslan Ermilov.Xc
365d4a76febSAlexander LangerDestroy a read/write lock object.
366d0353b83SRuslan Ermilov.It Xo
367d0353b83SRuslan Ermilov.Ft int
3688e750fa2SRuslan Ermilov.Fo pthread_rwlock_init
3698e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr"
3708e750fa2SRuslan Ermilov.Fc
371d0353b83SRuslan Ermilov.Xc
372d4a76febSAlexander LangerInitialize a read/write lock object.
373d0353b83SRuslan Ermilov.It Xo
374d0353b83SRuslan Ermilov.Ft int
375d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock"
376d0353b83SRuslan Ermilov.Xc
377d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be
378d4a76febSAlexander Langeracquired.
379d0353b83SRuslan Ermilov.It Xo
380d0353b83SRuslan Ermilov.Ft int
381d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock"
382d0353b83SRuslan Ermilov.Xc
383d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the
384d4a76febSAlexander Langerlock is unavailable.
385d0353b83SRuslan Ermilov.It Xo
386d0353b83SRuslan Ermilov.Ft int
387d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock"
388d0353b83SRuslan Ermilov.Xc
389d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the
390d4a76febSAlexander Langerlock is unavailable.
391d0353b83SRuslan Ermilov.It Xo
392d0353b83SRuslan Ermilov.Ft int
393d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock"
394d0353b83SRuslan Ermilov.Xc
395d4a76febSAlexander LangerUnlock a read/write lock.
396d0353b83SRuslan Ermilov.It Xo
397d0353b83SRuslan Ermilov.Ft int
398d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock"
399d0353b83SRuslan Ermilov.Xc
400d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be
401d4a76febSAlexander Langeracquired.
402d0353b83SRuslan Ermilov.It Xo
403d0353b83SRuslan Ermilov.Ft int
404d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr"
405d0353b83SRuslan Ermilov.Xc
406d4a76febSAlexander LangerDestroy a read/write lock attribute object.
407d0353b83SRuslan Ermilov.It Xo
408d0353b83SRuslan Ermilov.Ft int
4098e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared
4108e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared"
4118e750fa2SRuslan Ermilov.Fc
412d0353b83SRuslan Ermilov.Xc
413d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute
414d4a76febSAlexander Langerobject.
415d0353b83SRuslan Ermilov.It Xo
416d0353b83SRuslan Ermilov.Ft int
417d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr"
418d0353b83SRuslan Ermilov.Xc
419d4a76febSAlexander LangerInitialize a read/write lock attribute object.
420d0353b83SRuslan Ermilov.It Xo
421d0353b83SRuslan Ermilov.Ft int
422c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared"
423d0353b83SRuslan Ermilov.Xc
424d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object.
425d4a76febSAlexander Langer.El
4268e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines
4278e750fa2SRuslan Ermilov.Bl -tag -width indent
428d0353b83SRuslan Ermilov.It Xo
429d0353b83SRuslan Ermilov.Ft int
4308e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]"
431d0353b83SRuslan Ermilov.Xc
4320f7d6847SJulian ElischerCreate a thread-specific data key.
433d0353b83SRuslan Ermilov.It Xo
434d0353b83SRuslan Ermilov.Ft int
435d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key"
436d0353b83SRuslan Ermilov.Xc
4370f7d6847SJulian ElischerDelete a thread-specific data key.
438d0353b83SRuslan Ermilov.It Xo
439d0353b83SRuslan Ermilov.Ft "void *"
440c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key"
441d0353b83SRuslan Ermilov.Xc
4420f7d6847SJulian ElischerGet the thread-specific value for the specified key.
443d0353b83SRuslan Ermilov.It Xo
444d0353b83SRuslan Ermilov.Ft int
445d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr"
446d0353b83SRuslan Ermilov.Xc
4470f7d6847SJulian ElischerSet the thread-specific value for the specified key.
4480f7d6847SJulian Elischer.El
4498e750fa2SRuslan Ermilov.Ss Cleanup Routines
4508e750fa2SRuslan Ermilov.Bl -tag -width indent
451d0353b83SRuslan Ermilov.It Xo
452a3c8fc53SGiorgos Keramidas.Ft int
453a3c8fc53SGiorgos Keramidas.Fo pthread_atfork
454a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]"
455a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]"
456a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]"
457a3c8fc53SGiorgos Keramidas.Fc
458a3c8fc53SGiorgos Keramidas.Xc
459a3fb6da9SGlen BarberRegister fork handlers.
460a3c8fc53SGiorgos Keramidas.It Xo
461d0353b83SRuslan Ermilov.Ft void
462d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute"
463d0353b83SRuslan Ermilov.Xc
4640f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup
4650f7d6847SJulian Elischerstack and optionally invoke it.
466d0353b83SRuslan Ermilov.It Xo
467d0353b83SRuslan Ermilov.Ft void
4688e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg"
469d0353b83SRuslan Ermilov.Xc
4700f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's
4710f7d6847SJulian Elischercancellation stack.
4720f7d6847SJulian Elischer.El
4733e9ed1efSRuslan Ermilov.Sh IMPLEMENTATION NOTES
474b5c508fbSRuslan ErmilovThe current
475b5c508fbSRuslan Ermilov.Fx
4769c0f9817STom RhodesPOSIX thread implementation is built into the
4777ba7e041STom Rhodes.Lb libthr
4789c0f9817STom Rhodeslibrary.
4799c0f9817STom RhodesIt contains thread-safe versions of
480c133f2abSRuslan Ermilov.Lb libc
481c133f2abSRuslan Ermilovfunctions and the thread functions.
4829c0f9817STom RhodesThreaded applications are linked with this library.
483997d90beSBill Swingle.Sh SEE ALSO
4849c0f9817STom Rhodes.Xr libthr 3 ,
485a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 ,
486777f8cebSXin LI.Xr pthread_attr 3 ,
487c3f5198bSOlivier Houchard.Xr pthread_cancel 3 ,
4885521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 ,
4895521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 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 ,
496e52a1af2SBaptiste Daroussin.Xr pthread_condattr_destroy 3 ,
497e52a1af2SBaptiste Daroussin.Xr pthread_condattr_init 3 ,
4985521ff5aSRuslan Ermilov.Xr pthread_create 3 ,
4995521ff5aSRuslan Ermilov.Xr pthread_detach 3 ,
5005521ff5aSRuslan Ermilov.Xr pthread_equal 3 ,
5015521ff5aSRuslan Ermilov.Xr pthread_exit 3 ,
5025521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 ,
5035521ff5aSRuslan Ermilov.Xr pthread_join 3 ,
5045521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 ,
505d378717eSMaxim Konovalov.Xr pthread_kill 3 ,
506e52a1af2SBaptiste Daroussin.Xr pthread_mutex_destroy 3 ,
507e52a1af2SBaptiste Daroussin.Xr pthread_mutex_init 3 ,
508e52a1af2SBaptiste Daroussin.Xr pthread_mutex_lock 3 ,
509e52a1af2SBaptiste Daroussin.Xr pthread_mutex_trylock 3 ,
510e52a1af2SBaptiste Daroussin.Xr pthread_mutex_unlock 3 ,
511d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 ,
512d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 ,
513d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 ,
514d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 ,
515d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 ,
516d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 ,
517d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 ,
518d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 ,
519*df7d7638SFelix Johnson.Xr pthread_np 3 ,
5205521ff5aSRuslan Ermilov.Xr pthread_once 3 ,
521997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 ,
522997d90beSBill Swingle.Xr pthread_rwlock_init 3 ,
523997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 ,
524997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 ,
525997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 ,
526e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_destroy 3 ,
527e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_getpshared 3 ,
528e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_init 3 ,
529e52a1af2SBaptiste Daroussin.Xr pthread_rwlockattr_setpshared 3 ,
5305521ff5aSRuslan Ermilov.Xr pthread_self 3 ,
531d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 ,
532d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 ,
533d378717eSMaxim Konovalov.Xr pthread_setspecific 3 ,
534d378717eSMaxim Konovalov.Xr pthread_testcancel 3
5350f7d6847SJulian Elischer.Sh STANDARDS
536c133f2abSRuslan ErmilovThe functions with the
537c133f2abSRuslan Ermilov.Nm pthread_
538efc0456fSAlexander Langerprefix and not
539c133f2abSRuslan Ermilov.Nm _np
540d4a76febSAlexander Langersuffix or
541c133f2abSRuslan Ermilov.Nm pthread_rwlock
5423c233756SRuslan Ermilovprefix conform to
5433c233756SRuslan Ermilov.St -p1003.1-96 .
5440f7d6847SJulian Elischer.Pp
545c133f2abSRuslan ErmilovThe functions with the
546c133f2abSRuslan Ermilov.Nm pthread_
5470f7d6847SJulian Elischerprefix and
548c133f2abSRuslan Ermilov.Nm _np
5490f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads.
550d4a76febSAlexander Langer.Pp
551c133f2abSRuslan ErmilovThe functions with the
552c133f2abSRuslan Ermilov.Nm pthread_rwlock
5533c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the
5543c233756SRuslan Ermilov.St -susv2 .
555