xref: /freebsd/share/man/man3/pthread.3 (revision a3c8fc5312d54059adb56307959180fed5885e78)
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.\"
33c133f2abSRuslan Ermilov.Dd January 15, 2004
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
415b8ef52dSSimon L. B. Nielsen.Lb libthr
425b8ef52dSSimon L. B. Nielsen.Lb libc_r
43c70db3ffSBruce Evans.Sh SYNOPSIS
4432eef9aeSRuslan Ermilov.In pthread.h
450f7d6847SJulian Elischer.Sh DESCRIPTION
460f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with
470f7d6847SJulian Elischerrequirements for multiple flows of control, called
488e750fa2SRuslan Ermilov.Em threads ,
496d249eeeSSheldon Hearnwithin a process.
506d249eeeSSheldon HearnMultithreading is used to improve the performance of a
510f7d6847SJulian Elischerprogram.
520f7d6847SJulian Elischer.Pp
530f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following
540f7d6847SJulian Elischergroups:
558e750fa2SRuslan Ermilov.Pp
568e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact
570f7d6847SJulian Elischer.It
58d4a76febSAlexander LangerThread Routines
590f7d6847SJulian Elischer.It
600f7d6847SJulian ElischerAttribute Object Routines
610f7d6847SJulian Elischer.It
620f7d6847SJulian ElischerMutex Routines
630f7d6847SJulian Elischer.It
640f7d6847SJulian ElischerCondition Variable Routines
650f7d6847SJulian Elischer.It
66d4a76febSAlexander LangerRead/Write Lock Routines
67d4a76febSAlexander Langer.It
680f7d6847SJulian ElischerPer-Thread Context Routines
690f7d6847SJulian Elischer.It
700f7d6847SJulian ElischerCleanup Routines
710f7d6847SJulian Elischer.El
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
241d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling"
242d378717eSMaxim Konovalov.Xc
243d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object.
244d378717eSMaxim Konovalov.It Xo
245d378717eSMaxim Konovalov.Ft int
246d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol"
247d378717eSMaxim Konovalov.Xc
248d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object.
249d378717eSMaxim Konovalov.It Xo
250d378717eSMaxim Konovalov.Ft int
251d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *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
3498e750fa2SRuslan ErmilovWait no longer than the specified time for a condition
3508e750fa2SRuslan Ermilovand lock the specified 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
3550f7d6847SJulian ElischerWait for a condition and lock the specified 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
457a3c8fc53SGiorgos KeramidasRegister 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
4710f7d6847SJulian Elischer.Sh INSTALLATION
472b5c508fbSRuslan ErmilovThe current
473b5c508fbSRuslan Ermilov.Fx
474c133f2abSRuslan ErmilovPOSIX thread implementation is built in three libraries,
475c133f2abSRuslan Ermilov.Lb libc_r ,
476c133f2abSRuslan Ermilov.Lb libpthread ,
477c133f2abSRuslan Ermilovand
478c133f2abSRuslan Ermilov.Lb libthr .
479c133f2abSRuslan ErmilovThey contain both thread-safe versions of
480c133f2abSRuslan Ermilov.Lb libc
481c133f2abSRuslan Ermilovfunctions and the thread functions.
482c133f2abSRuslan ErmilovThreaded applications are linked with one of these libraries.
483997d90beSBill Swingle.Sh SEE ALSO
484a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 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