xref: /freebsd/share/man/man3/pthread.3 (revision 0227791b40a6936310e1dd376b0883b540fec0c0)
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
450d0353b83SRuslan Ermilov.Ft void
451d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute"
452d0353b83SRuslan Ermilov.Xc
4530f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup
4540f7d6847SJulian Elischerstack and optionally invoke it.
455d0353b83SRuslan Ermilov.It Xo
456d0353b83SRuslan Ermilov.Ft void
4578e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg"
458d0353b83SRuslan Ermilov.Xc
4590f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's
4600f7d6847SJulian Elischercancellation stack.
4610f7d6847SJulian Elischer.El
4620f7d6847SJulian Elischer.Sh INSTALLATION
463b5c508fbSRuslan ErmilovThe current
464b5c508fbSRuslan Ermilov.Fx
465c133f2abSRuslan ErmilovPOSIX thread implementation is built in three libraries,
466c133f2abSRuslan Ermilov.Lb libc_r ,
467c133f2abSRuslan Ermilov.Lb libpthread ,
468c133f2abSRuslan Ermilovand
469c133f2abSRuslan Ermilov.Lb libthr .
470c133f2abSRuslan ErmilovThey contain both thread-safe versions of
471c133f2abSRuslan Ermilov.Lb libc
472c133f2abSRuslan Ermilovfunctions and the thread functions.
473c133f2abSRuslan ErmilovThreaded applications are linked with one of these libraries.
474997d90beSBill Swingle.Sh SEE ALSO
4755521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 ,
4765521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 ,
477c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 ,
478c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 3 ,
479997d90beSBill Swingle.Xr pthread_cond_broadcast 3 ,
480997d90beSBill Swingle.Xr pthread_cond_destroy 3 ,
481997d90beSBill Swingle.Xr pthread_cond_init 3 ,
482997d90beSBill Swingle.Xr pthread_cond_signal 3 ,
483997d90beSBill Swingle.Xr pthread_cond_timedwait 3 ,
484997d90beSBill Swingle.Xr pthread_cond_wait 3 ,
4855521ff5aSRuslan Ermilov.Xr pthread_create 3 ,
4865521ff5aSRuslan Ermilov.Xr pthread_detach 3 ,
4875521ff5aSRuslan Ermilov.Xr pthread_equal 3 ,
4885521ff5aSRuslan Ermilov.Xr pthread_exit 3 ,
4895521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 ,
4905521ff5aSRuslan Ermilov.Xr pthread_join 3 ,
4915521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 ,
492d378717eSMaxim Konovalov.Xr pthread_kill 3 ,
493d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 ,
494d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 ,
495d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 ,
496d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 ,
497d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 ,
498d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 ,
499d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 ,
500d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 ,
501c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 ,
502c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 ,
503c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 ,
504c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 ,
505c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 ,
5065521ff5aSRuslan Ermilov.Xr pthread_once 3 ,
5075521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 ,
5085521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 ,
5095521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 ,
5105521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 3 ,
511997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 ,
512997d90beSBill Swingle.Xr pthread_rwlock_init 3 ,
513997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 ,
514997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 ,
515997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 ,
5165521ff5aSRuslan Ermilov.Xr pthread_self 3 ,
517d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 ,
518d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 ,
519d378717eSMaxim Konovalov.Xr pthread_setspecific 3 ,
520d378717eSMaxim Konovalov.Xr pthread_testcancel 3
5210f7d6847SJulian Elischer.Sh STANDARDS
522c133f2abSRuslan ErmilovThe functions with the
523c133f2abSRuslan Ermilov.Nm pthread_
524efc0456fSAlexander Langerprefix and not
525c133f2abSRuslan Ermilov.Nm _np
526d4a76febSAlexander Langersuffix or
527c133f2abSRuslan Ermilov.Nm pthread_rwlock
5283c233756SRuslan Ermilovprefix conform to
5293c233756SRuslan Ermilov.St -p1003.1-96 .
5300f7d6847SJulian Elischer.Pp
531c133f2abSRuslan ErmilovThe functions with the
532c133f2abSRuslan Ermilov.Nm pthread_
5330f7d6847SJulian Elischerprefix and
534c133f2abSRuslan Ermilov.Nm _np
5350f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads.
536d4a76febSAlexander Langer.Pp
537c133f2abSRuslan ErmilovThe functions with the
538c133f2abSRuslan Ermilov.Nm pthread_rwlock
5393c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the
5403c233756SRuslan Ermilov.St -susv2 .
541