xref: /freebsd/share/man/man3/pthread.3 (revision 09e90f51556c5f37307c946d73d22b6f1b19b79c)
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*09e90f51SGavin Atkinson.Dd August 12, 2014
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
708e750fa2SRuslan Ermilov.Ss Thread Routines
718e750fa2SRuslan Ermilov.Bl -tag -width indent
72d0353b83SRuslan Ermilov.It Xo
73d0353b83SRuslan Ermilov.Ft int
748e750fa2SRuslan Ermilov.Fo pthread_create
758e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr"
768e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg"
778e750fa2SRuslan Ermilov.Fc
78d0353b83SRuslan Ermilov.Xc
790f7d6847SJulian ElischerCreates a new thread of execution.
80d0353b83SRuslan Ermilov.It Xo
81d0353b83SRuslan Ermilov.Ft int
82d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread"
83d378717eSMaxim Konovalov.Xc
84d378717eSMaxim KonovalovCancels execution of a thread.
85d378717eSMaxim Konovalov.It Xo
86d378717eSMaxim Konovalov.Ft int
87d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread"
88d0353b83SRuslan Ermilov.Xc
890f7d6847SJulian ElischerMarks a thread for deletion.
90d0353b83SRuslan Ermilov.It Xo
91d0353b83SRuslan Ermilov.Ft int
92d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2"
93d0353b83SRuslan Ermilov.Xc
940f7d6847SJulian ElischerCompares two thread IDs.
95d0353b83SRuslan Ermilov.It Xo
96d0353b83SRuslan Ermilov.Ft void
97d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr"
98d0353b83SRuslan Ermilov.Xc
990f7d6847SJulian ElischerTerminates the calling thread.
100d0353b83SRuslan Ermilov.It Xo
101d0353b83SRuslan Ermilov.Ft int
102d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr"
103d0353b83SRuslan Ermilov.Xc
1040f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread.
105d0353b83SRuslan Ermilov.It Xo
106d0353b83SRuslan Ermilov.Ft int
107d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig"
108d0353b83SRuslan Ermilov.Xc
109d378717eSMaxim KonovalovDelivers a signal to a specified thread.
110d0353b83SRuslan Ermilov.It Xo
111d0353b83SRuslan Ermilov.Ft int
1128e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]"
113d0353b83SRuslan Ermilov.Xc
1140f7d6847SJulian ElischerCalls an initialization routine once.
115d0353b83SRuslan Ermilov.It Xo
116d0353b83SRuslan Ermilov.Ft pthread_t
117d0353b83SRuslan Ermilov.Fn pthread_self void
118d0353b83SRuslan Ermilov.Xc
1190f7d6847SJulian ElischerReturns the thread ID of the calling thread.
120d378717eSMaxim Konovalov.It Xo
121d378717eSMaxim Konovalov.Ft int
122d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate"
123d378717eSMaxim Konovalov.Xc
124d378717eSMaxim KonovalovSets the current thread's cancelability state.
125d378717eSMaxim Konovalov.It Xo
126d378717eSMaxim Konovalov.Ft int
127d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype"
128d378717eSMaxim Konovalov.Xc
129d378717eSMaxim KonovalovSets the current thread's cancelability type.
130d378717eSMaxim Konovalov.It Xo
131d378717eSMaxim Konovalov.Ft void
132d378717eSMaxim Konovalov.Fn pthread_testcancel void
133d378717eSMaxim Konovalov.Xc
134d378717eSMaxim KonovalovCreates a cancellation point in the calling thread.
135d378717eSMaxim Konovalov.It Xo
136d378717eSMaxim Konovalov.Ft void
137d378717eSMaxim Konovalov.Fn pthread_yield void
138d378717eSMaxim Konovalov.Xc
139d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one.
1400f7d6847SJulian Elischer.El
1418e750fa2SRuslan Ermilov.Ss Attribute Object Routines
1428e750fa2SRuslan Ermilov.Bl -tag -width indent
143d0353b83SRuslan Ermilov.It Xo
144d0353b83SRuslan Ermilov.Ft int
145d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr"
146d0353b83SRuslan Ermilov.Xc
1470f7d6847SJulian ElischerDestroy a thread attributes object.
148d0353b83SRuslan Ermilov.It Xo
149d0353b83SRuslan Ermilov.Ft int
1508e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched
1518e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched"
1528e750fa2SRuslan Ermilov.Fc
153d0353b83SRuslan Ermilov.Xc
1540f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object.
155d0353b83SRuslan Ermilov.It Xo
156d0353b83SRuslan Ermilov.Ft int
1578e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam
1588e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param"
1598e750fa2SRuslan Ermilov.Fc
160d0353b83SRuslan Ermilov.Xc
1610f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object.
162d0353b83SRuslan Ermilov.It Xo
163d0353b83SRuslan Ermilov.Ft int
164c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy"
165d0353b83SRuslan Ermilov.Xc
1660f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object.
167d0353b83SRuslan Ermilov.It Xo
168d0353b83SRuslan Ermilov.Ft int
169c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope"
170d0353b83SRuslan Ermilov.Xc
1710f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object.
172d0353b83SRuslan Ermilov.It Xo
173d0353b83SRuslan Ermilov.Ft int
174c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize"
175d0353b83SRuslan Ermilov.Xc
1760f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object.
177d0353b83SRuslan Ermilov.It Xo
178d0353b83SRuslan Ermilov.Ft int
179c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr"
180d0353b83SRuslan Ermilov.Xc
1810f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object.
182d0353b83SRuslan Ermilov.It Xo
183d0353b83SRuslan Ermilov.Ft int
184c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate"
185d0353b83SRuslan Ermilov.Xc
1860f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object.
187d0353b83SRuslan Ermilov.It Xo
188d0353b83SRuslan Ermilov.Ft int
189d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr"
190d0353b83SRuslan Ermilov.Xc
1910f7d6847SJulian ElischerInitialize a thread attributes object with default values.
192d0353b83SRuslan Ermilov.It Xo
193d0353b83SRuslan Ermilov.Ft int
194d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched"
195d0353b83SRuslan Ermilov.Xc
1960f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object.
197d0353b83SRuslan Ermilov.It Xo
198d0353b83SRuslan Ermilov.Ft int
1998e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam
2008e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param"
2018e750fa2SRuslan Ermilov.Fc
202d0353b83SRuslan Ermilov.Xc
2030f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object.
204d0353b83SRuslan Ermilov.It Xo
205d0353b83SRuslan Ermilov.Ft int
206d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy"
207d0353b83SRuslan Ermilov.Xc
2080f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object.
209d0353b83SRuslan Ermilov.It Xo
210d0353b83SRuslan Ermilov.Ft int
211d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope"
212d0353b83SRuslan Ermilov.Xc
2130f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object.
214d0353b83SRuslan Ermilov.It Xo
215d0353b83SRuslan Ermilov.Ft int
216d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize"
217d0353b83SRuslan Ermilov.Xc
2180f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object.
219d0353b83SRuslan Ermilov.It Xo
220d0353b83SRuslan Ermilov.Ft int
221d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr"
222d0353b83SRuslan Ermilov.Xc
2230f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object.
224d0353b83SRuslan Ermilov.It Xo
225d0353b83SRuslan Ermilov.Ft int
226d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate"
227d0353b83SRuslan Ermilov.Xc
2280f7d6847SJulian ElischerSet the detach state in a thread attributes object.
2290f7d6847SJulian Elischer.El
2308e750fa2SRuslan Ermilov.Ss Mutex Routines
2318e750fa2SRuslan Ermilov.Bl -tag -width indent
232d0353b83SRuslan Ermilov.It Xo
233d0353b83SRuslan Ermilov.Ft int
234d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr"
235d0353b83SRuslan Ermilov.Xc
2360f7d6847SJulian ElischerDestroy a mutex attributes object.
237d0353b83SRuslan Ermilov.It Xo
238d0353b83SRuslan Ermilov.Ft int
239d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling"
240d378717eSMaxim Konovalov.Xc
241d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object.
242d378717eSMaxim Konovalov.It Xo
243d378717eSMaxim Konovalov.Ft int
244d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol"
245d378717eSMaxim Konovalov.Xc
246d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object.
247d378717eSMaxim Konovalov.It Xo
248d378717eSMaxim Konovalov.Ft int
249d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type"
250d378717eSMaxim Konovalov.Xc
251d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object.
252d378717eSMaxim Konovalov.It Xo
253d378717eSMaxim Konovalov.Ft int
254d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr"
255d0353b83SRuslan Ermilov.Xc
2560f7d6847SJulian ElischerInitialize a mutex attributes object with default values.
257d0353b83SRuslan Ermilov.It Xo
258d0353b83SRuslan Ermilov.Ft int
259d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling"
260d378717eSMaxim Konovalov.Xc
261d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object.
262d378717eSMaxim Konovalov.It Xo
263d378717eSMaxim Konovalov.Ft int
264d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol"
265d378717eSMaxim Konovalov.Xc
266d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object.
267d378717eSMaxim Konovalov.It Xo
268d378717eSMaxim Konovalov.Ft int
269d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type"
270d378717eSMaxim Konovalov.Xc
271d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created.
272d378717eSMaxim Konovalov.It Xo
273d378717eSMaxim Konovalov.Ft int
274d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex"
275d0353b83SRuslan Ermilov.Xc
2760f7d6847SJulian ElischerDestroy a mutex.
277d0353b83SRuslan Ermilov.It Xo
278d0353b83SRuslan Ermilov.Ft int
2798e750fa2SRuslan Ermilov.Fo pthread_mutex_init
2808e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr"
2818e750fa2SRuslan Ermilov.Fc
282d0353b83SRuslan Ermilov.Xc
283dfb9495bSTim VanderhoekInitialize a mutex with specified attributes.
284d0353b83SRuslan Ermilov.It Xo
285d0353b83SRuslan Ermilov.Ft int
286d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex"
287d0353b83SRuslan Ermilov.Xc
2880f7d6847SJulian ElischerLock a mutex and block until it becomes available.
289d0353b83SRuslan Ermilov.It Xo
290d0353b83SRuslan Ermilov.Ft int
2918e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock
2928e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime"
2938e750fa2SRuslan Ermilov.Fc
2942aa9de1fSMike Makonnen.Xc
2952aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires.
2962aa9de1fSMike Makonnen.It Xo
2972aa9de1fSMike Makonnen.Ft int
298d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex"
299d0353b83SRuslan Ermilov.Xc
3000227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread,
3010f7d6847SJulian Elischerincluding the current thread.
302d0353b83SRuslan Ermilov.It Xo
303d0353b83SRuslan Ermilov.Ft int
304d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex"
305d0353b83SRuslan Ermilov.Xc
3060f7d6847SJulian ElischerUnlock a mutex.
3070f7d6847SJulian Elischer.El
3088e750fa2SRuslan Ermilov.Ss Condition Variable Routines
3098e750fa2SRuslan Ermilov.Bl -tag -width indent
310d0353b83SRuslan Ermilov.It Xo
311d0353b83SRuslan Ermilov.Ft int
312d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr"
313d0353b83SRuslan Ermilov.Xc
3140f7d6847SJulian ElischerDestroy a condition variable attributes object.
315d0353b83SRuslan Ermilov.It Xo
316d0353b83SRuslan Ermilov.Ft int
317d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr"
318d378717eSMaxim Konovalov.Xc
319d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values.
320d378717eSMaxim Konovalov.It Xo
321d378717eSMaxim Konovalov.Ft int
322d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond"
323d0353b83SRuslan Ermilov.Xc
3240f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable.
325d0353b83SRuslan Ermilov.It Xo
326d0353b83SRuslan Ermilov.Ft int
327d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond"
328d0353b83SRuslan Ermilov.Xc
3290f7d6847SJulian ElischerDestroy a condition variable.
330d0353b83SRuslan Ermilov.It Xo
331d0353b83SRuslan Ermilov.Ft int
332d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr"
333d0353b83SRuslan Ermilov.Xc
3340f7d6847SJulian ElischerInitialize a condition variable with specified attributes.
335d0353b83SRuslan Ermilov.It Xo
336d0353b83SRuslan Ermilov.Ft int
337d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond"
338d0353b83SRuslan Ermilov.Xc
3390f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable.
340d0353b83SRuslan Ermilov.It Xo
341d0353b83SRuslan Ermilov.Ft int
3428e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait
3438e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex"
3448e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime"
3458e750fa2SRuslan Ermilov.Fc
346d0353b83SRuslan Ermilov.Xc
347*09e90f51SGavin AtkinsonUnlock the specified mutex, wait no longer than the specified time for
348*09e90f51SGavin Atkinsona condition, and then relock the mutex.
349d0353b83SRuslan Ermilov.It Xo
350d0353b83SRuslan Ermilov.Ft int
351d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex"
352d0353b83SRuslan Ermilov.Xc
353*09e90f51SGavin AtkinsonUnlock the specified mutex, wait for a condition, and relock the mutex.
3540f7d6847SJulian Elischer.El
3558e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines
3568e750fa2SRuslan Ermilov.Bl -tag -width indent
357d0353b83SRuslan Ermilov.It Xo
358d0353b83SRuslan Ermilov.Ft int
359d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock"
360d0353b83SRuslan Ermilov.Xc
361d4a76febSAlexander LangerDestroy a read/write lock object.
362d0353b83SRuslan Ermilov.It Xo
363d0353b83SRuslan Ermilov.Ft int
3648e750fa2SRuslan Ermilov.Fo pthread_rwlock_init
3658e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr"
3668e750fa2SRuslan Ermilov.Fc
367d0353b83SRuslan Ermilov.Xc
368d4a76febSAlexander LangerInitialize a read/write lock object.
369d0353b83SRuslan Ermilov.It Xo
370d0353b83SRuslan Ermilov.Ft int
371d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock"
372d0353b83SRuslan Ermilov.Xc
373d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be
374d4a76febSAlexander Langeracquired.
375d0353b83SRuslan Ermilov.It Xo
376d0353b83SRuslan Ermilov.Ft int
377d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock"
378d0353b83SRuslan Ermilov.Xc
379d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the
380d4a76febSAlexander Langerlock is unavailable.
381d0353b83SRuslan Ermilov.It Xo
382d0353b83SRuslan Ermilov.Ft int
383d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock"
384d0353b83SRuslan Ermilov.Xc
385d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the
386d4a76febSAlexander Langerlock is unavailable.
387d0353b83SRuslan Ermilov.It Xo
388d0353b83SRuslan Ermilov.Ft int
389d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock"
390d0353b83SRuslan Ermilov.Xc
391d4a76febSAlexander LangerUnlock a read/write lock.
392d0353b83SRuslan Ermilov.It Xo
393d0353b83SRuslan Ermilov.Ft int
394d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock"
395d0353b83SRuslan Ermilov.Xc
396d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be
397d4a76febSAlexander Langeracquired.
398d0353b83SRuslan Ermilov.It Xo
399d0353b83SRuslan Ermilov.Ft int
400d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr"
401d0353b83SRuslan Ermilov.Xc
402d4a76febSAlexander LangerDestroy a read/write lock attribute object.
403d0353b83SRuslan Ermilov.It Xo
404d0353b83SRuslan Ermilov.Ft int
4058e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared
4068e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared"
4078e750fa2SRuslan Ermilov.Fc
408d0353b83SRuslan Ermilov.Xc
409d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute
410d4a76febSAlexander Langerobject.
411d0353b83SRuslan Ermilov.It Xo
412d0353b83SRuslan Ermilov.Ft int
413d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr"
414d0353b83SRuslan Ermilov.Xc
415d4a76febSAlexander LangerInitialize a read/write lock attribute object.
416d0353b83SRuslan Ermilov.It Xo
417d0353b83SRuslan Ermilov.Ft int
418c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared"
419d0353b83SRuslan Ermilov.Xc
420d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object.
421d4a76febSAlexander Langer.El
4228e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines
4238e750fa2SRuslan Ermilov.Bl -tag -width indent
424d0353b83SRuslan Ermilov.It Xo
425d0353b83SRuslan Ermilov.Ft int
4268e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]"
427d0353b83SRuslan Ermilov.Xc
4280f7d6847SJulian ElischerCreate a thread-specific data key.
429d0353b83SRuslan Ermilov.It Xo
430d0353b83SRuslan Ermilov.Ft int
431d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key"
432d0353b83SRuslan Ermilov.Xc
4330f7d6847SJulian ElischerDelete a thread-specific data key.
434d0353b83SRuslan Ermilov.It Xo
435d0353b83SRuslan Ermilov.Ft "void *"
436c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key"
437d0353b83SRuslan Ermilov.Xc
4380f7d6847SJulian ElischerGet the thread-specific value for the specified key.
439d0353b83SRuslan Ermilov.It Xo
440d0353b83SRuslan Ermilov.Ft int
441d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr"
442d0353b83SRuslan Ermilov.Xc
4430f7d6847SJulian ElischerSet the thread-specific value for the specified key.
4440f7d6847SJulian Elischer.El
4458e750fa2SRuslan Ermilov.Ss Cleanup Routines
4468e750fa2SRuslan Ermilov.Bl -tag -width indent
447d0353b83SRuslan Ermilov.It Xo
448a3c8fc53SGiorgos Keramidas.Ft int
449a3c8fc53SGiorgos Keramidas.Fo pthread_atfork
450a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]"
451a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]"
452a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]"
453a3c8fc53SGiorgos Keramidas.Fc
454a3c8fc53SGiorgos Keramidas.Xc
455a3fb6da9SGlen BarberRegister fork handlers.
456a3c8fc53SGiorgos Keramidas.It Xo
457d0353b83SRuslan Ermilov.Ft void
458d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute"
459d0353b83SRuslan Ermilov.Xc
4600f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup
4610f7d6847SJulian Elischerstack and optionally invoke it.
462d0353b83SRuslan Ermilov.It Xo
463d0353b83SRuslan Ermilov.Ft void
4648e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg"
465d0353b83SRuslan Ermilov.Xc
4660f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's
4670f7d6847SJulian Elischercancellation stack.
4680f7d6847SJulian Elischer.El
4693e9ed1efSRuslan Ermilov.Sh IMPLEMENTATION NOTES
470b5c508fbSRuslan ErmilovThe current
471b5c508fbSRuslan Ermilov.Fx
4729c0f9817STom RhodesPOSIX thread implementation is built into the
4737ba7e041STom Rhodes.Lb libthr
4749c0f9817STom Rhodeslibrary.
4759c0f9817STom RhodesIt contains thread-safe versions of
476c133f2abSRuslan Ermilov.Lb libc
477c133f2abSRuslan Ermilovfunctions and the thread functions.
4789c0f9817STom RhodesThreaded applications are linked with this library.
479997d90beSBill Swingle.Sh SEE ALSO
4809c0f9817STom Rhodes.Xr libthr 3 ,
481777f8cebSXin LI.Xr pthread_affinity_np 3 ,
482a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 ,
483777f8cebSXin LI.Xr pthread_attr 3 ,
484c3f5198bSOlivier Houchard.Xr pthread_cancel 3 ,
4855521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 ,
4865521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 ,
487c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 ,
488c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 3 ,
489997d90beSBill Swingle.Xr pthread_cond_broadcast 3 ,
490997d90beSBill Swingle.Xr pthread_cond_destroy 3 ,
491997d90beSBill Swingle.Xr pthread_cond_init 3 ,
492997d90beSBill Swingle.Xr pthread_cond_signal 3 ,
493997d90beSBill Swingle.Xr pthread_cond_timedwait 3 ,
494997d90beSBill Swingle.Xr pthread_cond_wait 3 ,
4955521ff5aSRuslan Ermilov.Xr pthread_create 3 ,
4965521ff5aSRuslan Ermilov.Xr pthread_detach 3 ,
4975521ff5aSRuslan Ermilov.Xr pthread_equal 3 ,
4985521ff5aSRuslan Ermilov.Xr pthread_exit 3 ,
4995521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 ,
5005521ff5aSRuslan Ermilov.Xr pthread_join 3 ,
5015521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 ,
502d378717eSMaxim Konovalov.Xr pthread_kill 3 ,
503d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 ,
504d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 ,
505d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 ,
506d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 ,
507d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 ,
508d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 ,
509d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 ,
510d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 ,
511c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 ,
512c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 ,
513c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 ,
514c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 ,
515c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 ,
5165521ff5aSRuslan Ermilov.Xr pthread_once 3 ,
5175521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 ,
5185521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 ,
5195521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 ,
5205521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 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 ,
5265521ff5aSRuslan Ermilov.Xr pthread_self 3 ,
527d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 ,
528d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 ,
529d378717eSMaxim Konovalov.Xr pthread_setspecific 3 ,
530d378717eSMaxim Konovalov.Xr pthread_testcancel 3
5310f7d6847SJulian Elischer.Sh STANDARDS
532c133f2abSRuslan ErmilovThe functions with the
533c133f2abSRuslan Ermilov.Nm pthread_
534efc0456fSAlexander Langerprefix and not
535c133f2abSRuslan Ermilov.Nm _np
536d4a76febSAlexander Langersuffix or
537c133f2abSRuslan Ermilov.Nm pthread_rwlock
5383c233756SRuslan Ermilovprefix conform to
5393c233756SRuslan Ermilov.St -p1003.1-96 .
5400f7d6847SJulian Elischer.Pp
541c133f2abSRuslan ErmilovThe functions with the
542c133f2abSRuslan Ermilov.Nm pthread_
5430f7d6847SJulian Elischerprefix and
544c133f2abSRuslan Ermilov.Nm _np
5450f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads.
546d4a76febSAlexander Langer.Pp
547c133f2abSRuslan ErmilovThe functions with the
548c133f2abSRuslan Ermilov.Nm pthread_rwlock
5493c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the
5503c233756SRuslan Ermilov.St -susv2 .
551