xref: /freebsd/share/man/man3/pthread.3 (revision c3f5198b21d49f2b5cec881200c54fcfd573300a)
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
42c70db3ffSBruce Evans.Sh SYNOPSIS
4332eef9aeSRuslan Ermilov.In pthread.h
440f7d6847SJulian Elischer.Sh DESCRIPTION
450f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with
460f7d6847SJulian Elischerrequirements for multiple flows of control, called
478e750fa2SRuslan Ermilov.Em threads ,
486d249eeeSSheldon Hearnwithin a process.
496d249eeeSSheldon HearnMultithreading is used to improve the performance of a
500f7d6847SJulian Elischerprogram.
510f7d6847SJulian Elischer.Pp
520f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following
530f7d6847SJulian Elischergroups:
548e750fa2SRuslan Ermilov.Pp
558e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact
560f7d6847SJulian Elischer.It
57d4a76febSAlexander LangerThread Routines
580f7d6847SJulian Elischer.It
590f7d6847SJulian ElischerAttribute Object Routines
600f7d6847SJulian Elischer.It
610f7d6847SJulian ElischerMutex Routines
620f7d6847SJulian Elischer.It
630f7d6847SJulian ElischerCondition Variable Routines
640f7d6847SJulian Elischer.It
65d4a76febSAlexander LangerRead/Write Lock Routines
66d4a76febSAlexander Langer.It
670f7d6847SJulian ElischerPer-Thread Context Routines
680f7d6847SJulian Elischer.It
690f7d6847SJulian ElischerCleanup Routines
700f7d6847SJulian Elischer.El
718e750fa2SRuslan Ermilov.Ss Thread Routines
728e750fa2SRuslan Ermilov.Bl -tag -width indent
73d0353b83SRuslan Ermilov.It Xo
74d0353b83SRuslan Ermilov.Ft int
758e750fa2SRuslan Ermilov.Fo pthread_create
768e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr"
778e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg"
788e750fa2SRuslan Ermilov.Fc
79d0353b83SRuslan Ermilov.Xc
800f7d6847SJulian ElischerCreates a new thread of execution.
81d0353b83SRuslan Ermilov.It Xo
82d0353b83SRuslan Ermilov.Ft int
83d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread"
84d378717eSMaxim Konovalov.Xc
85d378717eSMaxim KonovalovCancels execution of a thread.
86d378717eSMaxim Konovalov.It Xo
87d378717eSMaxim Konovalov.Ft int
88d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread"
89d0353b83SRuslan Ermilov.Xc
900f7d6847SJulian ElischerMarks a thread for deletion.
91d0353b83SRuslan Ermilov.It Xo
92d0353b83SRuslan Ermilov.Ft int
93d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2"
94d0353b83SRuslan Ermilov.Xc
950f7d6847SJulian ElischerCompares two thread IDs.
96d0353b83SRuslan Ermilov.It Xo
97d0353b83SRuslan Ermilov.Ft void
98d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr"
99d0353b83SRuslan Ermilov.Xc
1000f7d6847SJulian ElischerTerminates the calling thread.
101d0353b83SRuslan Ermilov.It Xo
102d0353b83SRuslan Ermilov.Ft int
103d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr"
104d0353b83SRuslan Ermilov.Xc
1050f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread.
106d0353b83SRuslan Ermilov.It Xo
107d0353b83SRuslan Ermilov.Ft int
108d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig"
109d0353b83SRuslan Ermilov.Xc
110d378717eSMaxim KonovalovDelivers a signal to a specified thread.
111d0353b83SRuslan Ermilov.It Xo
112d0353b83SRuslan Ermilov.Ft int
1138e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]"
114d0353b83SRuslan Ermilov.Xc
1150f7d6847SJulian ElischerCalls an initialization routine once.
116d0353b83SRuslan Ermilov.It Xo
117d0353b83SRuslan Ermilov.Ft pthread_t
118d0353b83SRuslan Ermilov.Fn pthread_self void
119d0353b83SRuslan Ermilov.Xc
1200f7d6847SJulian ElischerReturns the thread ID of the calling thread.
121d378717eSMaxim Konovalov.It Xo
122d378717eSMaxim Konovalov.Ft int
123d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate"
124d378717eSMaxim Konovalov.Xc
125d378717eSMaxim KonovalovSets the current thread's cancelability state.
126d378717eSMaxim Konovalov.It Xo
127d378717eSMaxim Konovalov.Ft int
128d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype"
129d378717eSMaxim Konovalov.Xc
130d378717eSMaxim KonovalovSets the current thread's cancelability type.
131d378717eSMaxim Konovalov.It Xo
132d378717eSMaxim Konovalov.Ft void
133d378717eSMaxim Konovalov.Fn pthread_testcancel void
134d378717eSMaxim Konovalov.Xc
135d378717eSMaxim KonovalovCreates a cancellation point in the calling thread.
136d378717eSMaxim Konovalov.It Xo
137d378717eSMaxim Konovalov.Ft void
138d378717eSMaxim Konovalov.Fn pthread_yield void
139d378717eSMaxim Konovalov.Xc
140d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one.
1410f7d6847SJulian Elischer.El
1428e750fa2SRuslan Ermilov.Ss Attribute Object Routines
1438e750fa2SRuslan Ermilov.Bl -tag -width indent
144d0353b83SRuslan Ermilov.It Xo
145d0353b83SRuslan Ermilov.Ft int
146d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr"
147d0353b83SRuslan Ermilov.Xc
1480f7d6847SJulian ElischerDestroy a thread attributes object.
149d0353b83SRuslan Ermilov.It Xo
150d0353b83SRuslan Ermilov.Ft int
1518e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched
1528e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched"
1538e750fa2SRuslan Ermilov.Fc
154d0353b83SRuslan Ermilov.Xc
1550f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object.
156d0353b83SRuslan Ermilov.It Xo
157d0353b83SRuslan Ermilov.Ft int
1588e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam
1598e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param"
1608e750fa2SRuslan Ermilov.Fc
161d0353b83SRuslan Ermilov.Xc
1620f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object.
163d0353b83SRuslan Ermilov.It Xo
164d0353b83SRuslan Ermilov.Ft int
165c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy"
166d0353b83SRuslan Ermilov.Xc
1670f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object.
168d0353b83SRuslan Ermilov.It Xo
169d0353b83SRuslan Ermilov.Ft int
170c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope"
171d0353b83SRuslan Ermilov.Xc
1720f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object.
173d0353b83SRuslan Ermilov.It Xo
174d0353b83SRuslan Ermilov.Ft int
175c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize"
176d0353b83SRuslan Ermilov.Xc
1770f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object.
178d0353b83SRuslan Ermilov.It Xo
179d0353b83SRuslan Ermilov.Ft int
180c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr"
181d0353b83SRuslan Ermilov.Xc
1820f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object.
183d0353b83SRuslan Ermilov.It Xo
184d0353b83SRuslan Ermilov.Ft int
185c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate"
186d0353b83SRuslan Ermilov.Xc
1870f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object.
188d0353b83SRuslan Ermilov.It Xo
189d0353b83SRuslan Ermilov.Ft int
190d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr"
191d0353b83SRuslan Ermilov.Xc
1920f7d6847SJulian ElischerInitialize a thread attributes object with default values.
193d0353b83SRuslan Ermilov.It Xo
194d0353b83SRuslan Ermilov.Ft int
195d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched"
196d0353b83SRuslan Ermilov.Xc
1970f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object.
198d0353b83SRuslan Ermilov.It Xo
199d0353b83SRuslan Ermilov.Ft int
2008e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam
2018e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param"
2028e750fa2SRuslan Ermilov.Fc
203d0353b83SRuslan Ermilov.Xc
2040f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object.
205d0353b83SRuslan Ermilov.It Xo
206d0353b83SRuslan Ermilov.Ft int
207d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy"
208d0353b83SRuslan Ermilov.Xc
2090f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object.
210d0353b83SRuslan Ermilov.It Xo
211d0353b83SRuslan Ermilov.Ft int
212d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope"
213d0353b83SRuslan Ermilov.Xc
2140f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object.
215d0353b83SRuslan Ermilov.It Xo
216d0353b83SRuslan Ermilov.Ft int
217d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize"
218d0353b83SRuslan Ermilov.Xc
2190f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object.
220d0353b83SRuslan Ermilov.It Xo
221d0353b83SRuslan Ermilov.Ft int
222d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr"
223d0353b83SRuslan Ermilov.Xc
2240f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object.
225d0353b83SRuslan Ermilov.It Xo
226d0353b83SRuslan Ermilov.Ft int
227d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate"
228d0353b83SRuslan Ermilov.Xc
2290f7d6847SJulian ElischerSet the detach state in a thread attributes object.
2300f7d6847SJulian Elischer.El
2318e750fa2SRuslan Ermilov.Ss Mutex Routines
2328e750fa2SRuslan Ermilov.Bl -tag -width indent
233d0353b83SRuslan Ermilov.It Xo
234d0353b83SRuslan Ermilov.Ft int
235d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr"
236d0353b83SRuslan Ermilov.Xc
2370f7d6847SJulian ElischerDestroy a mutex attributes object.
238d0353b83SRuslan Ermilov.It Xo
239d0353b83SRuslan Ermilov.Ft int
240d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling"
241d378717eSMaxim Konovalov.Xc
242d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object.
243d378717eSMaxim Konovalov.It Xo
244d378717eSMaxim Konovalov.Ft int
245d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol"
246d378717eSMaxim Konovalov.Xc
247d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object.
248d378717eSMaxim Konovalov.It Xo
249d378717eSMaxim Konovalov.Ft int
250d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type"
251d378717eSMaxim Konovalov.Xc
252d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object.
253d378717eSMaxim Konovalov.It Xo
254d378717eSMaxim Konovalov.Ft int
255d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr"
256d0353b83SRuslan Ermilov.Xc
2570f7d6847SJulian ElischerInitialize a mutex attributes object with default values.
258d0353b83SRuslan Ermilov.It Xo
259d0353b83SRuslan Ermilov.Ft int
260d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling"
261d378717eSMaxim Konovalov.Xc
262d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object.
263d378717eSMaxim Konovalov.It Xo
264d378717eSMaxim Konovalov.Ft int
265d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol"
266d378717eSMaxim Konovalov.Xc
267d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object.
268d378717eSMaxim Konovalov.It Xo
269d378717eSMaxim Konovalov.Ft int
270d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type"
271d378717eSMaxim Konovalov.Xc
272d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created.
273d378717eSMaxim Konovalov.It Xo
274d378717eSMaxim Konovalov.Ft int
275d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex"
276d0353b83SRuslan Ermilov.Xc
2770f7d6847SJulian ElischerDestroy a mutex.
278d0353b83SRuslan Ermilov.It Xo
279d0353b83SRuslan Ermilov.Ft int
2808e750fa2SRuslan Ermilov.Fo pthread_mutex_init
2818e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr"
2828e750fa2SRuslan Ermilov.Fc
283d0353b83SRuslan Ermilov.Xc
284dfb9495bSTim VanderhoekInitialize a mutex with specified attributes.
285d0353b83SRuslan Ermilov.It Xo
286d0353b83SRuslan Ermilov.Ft int
287d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex"
288d0353b83SRuslan Ermilov.Xc
2890f7d6847SJulian ElischerLock a mutex and block until it becomes available.
290d0353b83SRuslan Ermilov.It Xo
291d0353b83SRuslan Ermilov.Ft int
2928e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock
2938e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime"
2948e750fa2SRuslan Ermilov.Fc
2952aa9de1fSMike Makonnen.Xc
2962aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires.
2972aa9de1fSMike Makonnen.It Xo
2982aa9de1fSMike Makonnen.Ft int
299d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex"
300d0353b83SRuslan Ermilov.Xc
3010227791bSRuslan ErmilovTry to lock a mutex, but do not block if the mutex is locked by another thread,
3020f7d6847SJulian Elischerincluding the current thread.
303d0353b83SRuslan Ermilov.It Xo
304d0353b83SRuslan Ermilov.Ft int
305d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex"
306d0353b83SRuslan Ermilov.Xc
3070f7d6847SJulian ElischerUnlock a mutex.
3080f7d6847SJulian Elischer.El
3098e750fa2SRuslan Ermilov.Ss Condition Variable Routines
3108e750fa2SRuslan Ermilov.Bl -tag -width indent
311d0353b83SRuslan Ermilov.It Xo
312d0353b83SRuslan Ermilov.Ft int
313d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr"
314d0353b83SRuslan Ermilov.Xc
3150f7d6847SJulian ElischerDestroy a condition variable attributes object.
316d0353b83SRuslan Ermilov.It Xo
317d0353b83SRuslan Ermilov.Ft int
318d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr"
319d378717eSMaxim Konovalov.Xc
320d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values.
321d378717eSMaxim Konovalov.It Xo
322d378717eSMaxim Konovalov.Ft int
323d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond"
324d0353b83SRuslan Ermilov.Xc
3250f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable.
326d0353b83SRuslan Ermilov.It Xo
327d0353b83SRuslan Ermilov.Ft int
328d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond"
329d0353b83SRuslan Ermilov.Xc
3300f7d6847SJulian ElischerDestroy a condition variable.
331d0353b83SRuslan Ermilov.It Xo
332d0353b83SRuslan Ermilov.Ft int
333d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr"
334d0353b83SRuslan Ermilov.Xc
3350f7d6847SJulian ElischerInitialize a condition variable with specified attributes.
336d0353b83SRuslan Ermilov.It Xo
337d0353b83SRuslan Ermilov.Ft int
338d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond"
339d0353b83SRuslan Ermilov.Xc
3400f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable.
341d0353b83SRuslan Ermilov.It Xo
342d0353b83SRuslan Ermilov.Ft int
3438e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait
3448e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex"
3458e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime"
3468e750fa2SRuslan Ermilov.Fc
347d0353b83SRuslan Ermilov.Xc
3488e750fa2SRuslan ErmilovWait no longer than the specified time for a condition
3498e750fa2SRuslan Ermilovand lock the specified mutex.
350d0353b83SRuslan Ermilov.It Xo
351d0353b83SRuslan Ermilov.Ft int
352d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex"
353d0353b83SRuslan Ermilov.Xc
3540f7d6847SJulian ElischerWait for a condition and lock the specified mutex.
3550f7d6847SJulian Elischer.El
3568e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines
3578e750fa2SRuslan Ermilov.Bl -tag -width indent
358d0353b83SRuslan Ermilov.It Xo
359d0353b83SRuslan Ermilov.Ft int
360d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock"
361d0353b83SRuslan Ermilov.Xc
362d4a76febSAlexander LangerDestroy a read/write lock object.
363d0353b83SRuslan Ermilov.It Xo
364d0353b83SRuslan Ermilov.Ft int
3658e750fa2SRuslan Ermilov.Fo pthread_rwlock_init
3668e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr"
3678e750fa2SRuslan Ermilov.Fc
368d0353b83SRuslan Ermilov.Xc
369d4a76febSAlexander LangerInitialize a read/write lock object.
370d0353b83SRuslan Ermilov.It Xo
371d0353b83SRuslan Ermilov.Ft int
372d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock"
373d0353b83SRuslan Ermilov.Xc
374d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be
375d4a76febSAlexander Langeracquired.
376d0353b83SRuslan Ermilov.It Xo
377d0353b83SRuslan Ermilov.Ft int
378d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock"
379d0353b83SRuslan Ermilov.Xc
380d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the
381d4a76febSAlexander Langerlock is unavailable.
382d0353b83SRuslan Ermilov.It Xo
383d0353b83SRuslan Ermilov.Ft int
384d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock"
385d0353b83SRuslan Ermilov.Xc
386d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the
387d4a76febSAlexander Langerlock is unavailable.
388d0353b83SRuslan Ermilov.It Xo
389d0353b83SRuslan Ermilov.Ft int
390d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock"
391d0353b83SRuslan Ermilov.Xc
392d4a76febSAlexander LangerUnlock a read/write lock.
393d0353b83SRuslan Ermilov.It Xo
394d0353b83SRuslan Ermilov.Ft int
395d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock"
396d0353b83SRuslan Ermilov.Xc
397d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be
398d4a76febSAlexander Langeracquired.
399d0353b83SRuslan Ermilov.It Xo
400d0353b83SRuslan Ermilov.Ft int
401d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr"
402d0353b83SRuslan Ermilov.Xc
403d4a76febSAlexander LangerDestroy a read/write lock attribute object.
404d0353b83SRuslan Ermilov.It Xo
405d0353b83SRuslan Ermilov.Ft int
4068e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared
4078e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared"
4088e750fa2SRuslan Ermilov.Fc
409d0353b83SRuslan Ermilov.Xc
410d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute
411d4a76febSAlexander Langerobject.
412d0353b83SRuslan Ermilov.It Xo
413d0353b83SRuslan Ermilov.Ft int
414d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr"
415d0353b83SRuslan Ermilov.Xc
416d4a76febSAlexander LangerInitialize a read/write lock attribute object.
417d0353b83SRuslan Ermilov.It Xo
418d0353b83SRuslan Ermilov.Ft int
419c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared"
420d0353b83SRuslan Ermilov.Xc
421d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object.
422d4a76febSAlexander Langer.El
4238e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines
4248e750fa2SRuslan Ermilov.Bl -tag -width indent
425d0353b83SRuslan Ermilov.It Xo
426d0353b83SRuslan Ermilov.Ft int
4278e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]"
428d0353b83SRuslan Ermilov.Xc
4290f7d6847SJulian ElischerCreate a thread-specific data key.
430d0353b83SRuslan Ermilov.It Xo
431d0353b83SRuslan Ermilov.Ft int
432d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key"
433d0353b83SRuslan Ermilov.Xc
4340f7d6847SJulian ElischerDelete a thread-specific data key.
435d0353b83SRuslan Ermilov.It Xo
436d0353b83SRuslan Ermilov.Ft "void *"
437c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key"
438d0353b83SRuslan Ermilov.Xc
4390f7d6847SJulian ElischerGet the thread-specific value for the specified key.
440d0353b83SRuslan Ermilov.It Xo
441d0353b83SRuslan Ermilov.Ft int
442d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr"
443d0353b83SRuslan Ermilov.Xc
4440f7d6847SJulian ElischerSet the thread-specific value for the specified key.
4450f7d6847SJulian Elischer.El
4468e750fa2SRuslan Ermilov.Ss Cleanup Routines
4478e750fa2SRuslan Ermilov.Bl -tag -width indent
448d0353b83SRuslan Ermilov.It Xo
449a3c8fc53SGiorgos Keramidas.Ft int
450a3c8fc53SGiorgos Keramidas.Fo pthread_atfork
451a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*prepare\*[rp]\*[lp]void\*[rp]"
452a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*parent\*[rp]\*[lp]void\*[rp]"
453a3c8fc53SGiorgos Keramidas.Fa "void \*[lp]*child\*[rp]\*[lp]void\*[rp]"
454a3c8fc53SGiorgos Keramidas.Fc
455a3c8fc53SGiorgos Keramidas.Xc
456a3c8fc53SGiorgos KeramidasRegister fork handlers
457a3c8fc53SGiorgos Keramidas.It Xo
458d0353b83SRuslan Ermilov.Ft void
459d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute"
460d0353b83SRuslan Ermilov.Xc
4610f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup
4620f7d6847SJulian Elischerstack and optionally invoke it.
463d0353b83SRuslan Ermilov.It Xo
464d0353b83SRuslan Ermilov.Ft void
4658e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg"
466d0353b83SRuslan Ermilov.Xc
4670f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's
4680f7d6847SJulian Elischercancellation stack.
4690f7d6847SJulian Elischer.El
4700f7d6847SJulian Elischer.Sh INSTALLATION
471b5c508fbSRuslan ErmilovThe current
472b5c508fbSRuslan Ermilov.Fx
4735bb9f210SRuslan ErmilovPOSIX thread implementation is built in two libraries,
474c133f2abSRuslan Ermilov.Lb libpthread ,
475c133f2abSRuslan Ermilovand
476c133f2abSRuslan Ermilov.Lb libthr .
477c133f2abSRuslan ErmilovThey contain both thread-safe versions of
478c133f2abSRuslan Ermilov.Lb libc
479c133f2abSRuslan Ermilovfunctions and the thread functions.
480c133f2abSRuslan ErmilovThreaded applications are linked with one of these libraries.
481997d90beSBill Swingle.Sh SEE ALSO
482a3c8fc53SGiorgos Keramidas.Xr pthread_atfork 3 ,
483c3f5198bSOlivier Houchard.Xr pthread_cancel 3 ,
4845521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 ,
4855521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 ,
486c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 ,
487c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 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 ,
4945521ff5aSRuslan Ermilov.Xr pthread_create 3 ,
4955521ff5aSRuslan Ermilov.Xr pthread_detach 3 ,
4965521ff5aSRuslan Ermilov.Xr pthread_equal 3 ,
4975521ff5aSRuslan Ermilov.Xr pthread_exit 3 ,
4985521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 ,
4995521ff5aSRuslan Ermilov.Xr pthread_join 3 ,
5005521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 ,
501d378717eSMaxim Konovalov.Xr pthread_kill 3 ,
502d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 ,
503d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 ,
504d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 ,
505d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 ,
506d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 ,
507d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 ,
508d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 ,
509d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 ,
510c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 ,
511c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 ,
512c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 ,
513c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 ,
514c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 ,
5155521ff5aSRuslan Ermilov.Xr pthread_once 3 ,
5165521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 ,
5175521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 ,
5185521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 ,
5195521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 3 ,
520997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 ,
521997d90beSBill Swingle.Xr pthread_rwlock_init 3 ,
522997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 ,
523997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 ,
524997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 ,
5255521ff5aSRuslan Ermilov.Xr pthread_self 3 ,
526d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 ,
527d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 ,
528d378717eSMaxim Konovalov.Xr pthread_setspecific 3 ,
529d378717eSMaxim Konovalov.Xr pthread_testcancel 3
5300f7d6847SJulian Elischer.Sh STANDARDS
531c133f2abSRuslan ErmilovThe functions with the
532c133f2abSRuslan Ermilov.Nm pthread_
533efc0456fSAlexander Langerprefix and not
534c133f2abSRuslan Ermilov.Nm _np
535d4a76febSAlexander Langersuffix or
536c133f2abSRuslan Ermilov.Nm pthread_rwlock
5373c233756SRuslan Ermilovprefix conform to
5383c233756SRuslan Ermilov.St -p1003.1-96 .
5390f7d6847SJulian Elischer.Pp
540c133f2abSRuslan ErmilovThe functions with the
541c133f2abSRuslan Ermilov.Nm pthread_
5420f7d6847SJulian Elischerprefix and
543c133f2abSRuslan Ermilov.Nm _np
5440f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads.
545d4a76febSAlexander Langer.Pp
546c133f2abSRuslan ErmilovThe functions with the
547c133f2abSRuslan Ermilov.Nm pthread_rwlock
5483c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the
5493c233756SRuslan Ermilov.St -susv2 .
550