xref: /freebsd/share/man/man3/pthread.3 (revision 8e750fa2e6075e349e19f43537858c084d91d948)
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.\"
33d4a76febSAlexander Langer.Dd September 10, 1998
340f7d6847SJulian Elischer.Dt PTHREAD 3
353d45e180SRuslan Ermilov.Os
360f7d6847SJulian Elischer.Sh NAME
370f7d6847SJulian Elischer.Nm pthread
380f7d6847SJulian Elischer.Nd POSIX thread functions
39c70db3ffSBruce Evans.Sh SYNOPSIS
4032eef9aeSRuslan Ermilov.In pthread.h
410f7d6847SJulian Elischer.Sh DESCRIPTION
420f7d6847SJulian ElischerPOSIX threads are a set of functions that support applications with
430f7d6847SJulian Elischerrequirements for multiple flows of control, called
448e750fa2SRuslan Ermilov.Em threads ,
456d249eeeSSheldon Hearnwithin a process.
466d249eeeSSheldon HearnMultithreading is used to improve the performance of a
470f7d6847SJulian Elischerprogram.
480f7d6847SJulian Elischer.Pp
490f7d6847SJulian ElischerThe POSIX thread functions are summarized in this section in the following
500f7d6847SJulian Elischergroups:
518e750fa2SRuslan Ermilov.Pp
528e750fa2SRuslan Ermilov.Bl -bullet -offset indent -compact
530f7d6847SJulian Elischer.It
54d4a76febSAlexander LangerThread Routines
550f7d6847SJulian Elischer.It
560f7d6847SJulian ElischerAttribute Object Routines
570f7d6847SJulian Elischer.It
580f7d6847SJulian ElischerMutex Routines
590f7d6847SJulian Elischer.It
600f7d6847SJulian ElischerCondition Variable Routines
610f7d6847SJulian Elischer.It
62d4a76febSAlexander LangerRead/Write Lock Routines
63d4a76febSAlexander Langer.It
640f7d6847SJulian ElischerPer-Thread Context Routines
650f7d6847SJulian Elischer.It
660f7d6847SJulian ElischerCleanup Routines
670f7d6847SJulian Elischer.El
688e750fa2SRuslan Ermilov.Ss Thread Routines
698e750fa2SRuslan Ermilov.Bl -tag -width indent
70d0353b83SRuslan Ermilov.It Xo
71d0353b83SRuslan Ermilov.Ft int
728e750fa2SRuslan Ermilov.Fo pthread_create
738e750fa2SRuslan Ermilov.Fa "pthread_t *thread" "const pthread_attr_t *attr"
748e750fa2SRuslan Ermilov.Fa "void *\*[lp]*start_routine\*[rp]\*[lp]void *\*[rp]" "void *arg"
758e750fa2SRuslan Ermilov.Fc
76d0353b83SRuslan Ermilov.Xc
770f7d6847SJulian ElischerCreates a new thread of execution.
78d0353b83SRuslan Ermilov.It Xo
79d0353b83SRuslan Ermilov.Ft int
80d378717eSMaxim Konovalov.Fn pthread_cancel "pthread_t thread"
81d378717eSMaxim Konovalov.Xc
82d378717eSMaxim KonovalovCancels execution of a thread.
83d378717eSMaxim Konovalov.It Xo
84d378717eSMaxim Konovalov.Ft int
85d0353b83SRuslan Ermilov.Fn pthread_detach "pthread_t thread"
86d0353b83SRuslan Ermilov.Xc
870f7d6847SJulian ElischerMarks a thread for deletion.
88d0353b83SRuslan Ermilov.It Xo
89d0353b83SRuslan Ermilov.Ft int
90d0353b83SRuslan Ermilov.Fn pthread_equal "pthread_t t1" "pthread_t t2"
91d0353b83SRuslan Ermilov.Xc
920f7d6847SJulian ElischerCompares two thread IDs.
93d0353b83SRuslan Ermilov.It Xo
94d0353b83SRuslan Ermilov.Ft void
95d0353b83SRuslan Ermilov.Fn pthread_exit "void *value_ptr"
96d0353b83SRuslan Ermilov.Xc
970f7d6847SJulian ElischerTerminates the calling thread.
98d0353b83SRuslan Ermilov.It Xo
99d0353b83SRuslan Ermilov.Ft int
100d0353b83SRuslan Ermilov.Fn pthread_join "pthread_t thread" "void **value_ptr"
101d0353b83SRuslan Ermilov.Xc
1020f7d6847SJulian ElischerCauses the calling thread to wait for the termination of the specified thread.
103d0353b83SRuslan Ermilov.It Xo
104d0353b83SRuslan Ermilov.Ft int
105d378717eSMaxim Konovalov.Fn pthread_kill "pthread_t thread" "int sig"
106d0353b83SRuslan Ermilov.Xc
107d378717eSMaxim KonovalovDelivers a signal to a specified thread.
108d0353b83SRuslan Ermilov.It Xo
109d0353b83SRuslan Ermilov.Ft int
1108e750fa2SRuslan Ermilov.Fn pthread_once "pthread_once_t *once_control" "void \*[lp]*init_routine\*[rp]\*[lp]void\*[rp]"
111d0353b83SRuslan Ermilov.Xc
1120f7d6847SJulian ElischerCalls an initialization routine once.
113d0353b83SRuslan Ermilov.It Xo
114d0353b83SRuslan Ermilov.Ft pthread_t
115d0353b83SRuslan Ermilov.Fn pthread_self void
116d0353b83SRuslan Ermilov.Xc
1170f7d6847SJulian ElischerReturns the thread ID of the calling thread.
118d378717eSMaxim Konovalov.It Xo
119d378717eSMaxim Konovalov.Ft int
120d378717eSMaxim Konovalov.Fn pthread_setcancelstate "int state" "int *oldstate"
121d378717eSMaxim Konovalov.Xc
122d378717eSMaxim KonovalovSets the current thread's cancelability state.
123d378717eSMaxim Konovalov.It Xo
124d378717eSMaxim Konovalov.Ft int
125d378717eSMaxim Konovalov.Fn pthread_setcanceltype "int type" "int *oldtype"
126d378717eSMaxim Konovalov.Xc
127d378717eSMaxim KonovalovSets the current thread's cancelability type.
128d378717eSMaxim Konovalov.It Xo
129d378717eSMaxim Konovalov.Ft void
130d378717eSMaxim Konovalov.Fn pthread_testcancel void
131d378717eSMaxim Konovalov.Xc
132d378717eSMaxim KonovalovCreates a cancellation point in the calling thread.
133d378717eSMaxim Konovalov.It Xo
134d378717eSMaxim Konovalov.Ft void
135d378717eSMaxim Konovalov.Fn pthread_yield void
136d378717eSMaxim Konovalov.Xc
137d378717eSMaxim KonovalovAllows the scheduler to run another thread instead of the current one.
1380f7d6847SJulian Elischer.El
1398e750fa2SRuslan Ermilov.Ss Attribute Object Routines
1408e750fa2SRuslan Ermilov.Bl -tag -width indent
141d0353b83SRuslan Ermilov.It Xo
142d0353b83SRuslan Ermilov.Ft int
143d0353b83SRuslan Ermilov.Fn pthread_attr_destroy "pthread_attr_t *attr"
144d0353b83SRuslan Ermilov.Xc
1450f7d6847SJulian ElischerDestroy a thread attributes object.
146d0353b83SRuslan Ermilov.It Xo
147d0353b83SRuslan Ermilov.Ft int
1488e750fa2SRuslan Ermilov.Fo pthread_attr_getinheritsched
1498e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "int *inheritsched"
1508e750fa2SRuslan Ermilov.Fc
151d0353b83SRuslan Ermilov.Xc
1520f7d6847SJulian ElischerGet the inherit scheduling attribute from a thread attributes object.
153d0353b83SRuslan Ermilov.It Xo
154d0353b83SRuslan Ermilov.Ft int
1558e750fa2SRuslan Ermilov.Fo pthread_attr_getschedparam
1568e750fa2SRuslan Ermilov.Fa "const pthread_attr_t *attr" "struct sched_param *param"
1578e750fa2SRuslan Ermilov.Fc
158d0353b83SRuslan Ermilov.Xc
1590f7d6847SJulian ElischerGet the scheduling parameter attribute from a thread attributes object.
160d0353b83SRuslan Ermilov.It Xo
161d0353b83SRuslan Ermilov.Ft int
162c70db3ffSBruce Evans.Fn pthread_attr_getschedpolicy "const pthread_attr_t *attr" "int *policy"
163d0353b83SRuslan Ermilov.Xc
1640f7d6847SJulian ElischerGet the scheduling policy attribute from a thread attributes object.
165d0353b83SRuslan Ermilov.It Xo
166d0353b83SRuslan Ermilov.Ft int
167c70db3ffSBruce Evans.Fn pthread_attr_getscope "const pthread_attr_t *attr" "int *contentionscope"
168d0353b83SRuslan Ermilov.Xc
1690f7d6847SJulian ElischerGet the contention scope attribute from a thread attributes object.
170d0353b83SRuslan Ermilov.It Xo
171d0353b83SRuslan Ermilov.Ft int
172c70db3ffSBruce Evans.Fn pthread_attr_getstacksize "const pthread_attr_t *attr" "size_t *stacksize"
173d0353b83SRuslan Ermilov.Xc
1740f7d6847SJulian ElischerGet the stack size attribute from a thread attributes object.
175d0353b83SRuslan Ermilov.It Xo
176d0353b83SRuslan Ermilov.Ft int
177c70db3ffSBruce Evans.Fn pthread_attr_getstackaddr "const pthread_attr_t *attr" "void **stackaddr"
178d0353b83SRuslan Ermilov.Xc
1790f7d6847SJulian ElischerGet the stack address attribute from a thread attributes object.
180d0353b83SRuslan Ermilov.It Xo
181d0353b83SRuslan Ermilov.Ft int
182c70db3ffSBruce Evans.Fn pthread_attr_getdetachstate "const pthread_attr_t *attr" "int *detachstate"
183d0353b83SRuslan Ermilov.Xc
1840f7d6847SJulian ElischerGet the detach state attribute from a thread attributes object.
185d0353b83SRuslan Ermilov.It Xo
186d0353b83SRuslan Ermilov.Ft int
187d0353b83SRuslan Ermilov.Fn pthread_attr_init "pthread_attr_t *attr"
188d0353b83SRuslan Ermilov.Xc
1890f7d6847SJulian ElischerInitialize a thread attributes object with default values.
190d0353b83SRuslan Ermilov.It Xo
191d0353b83SRuslan Ermilov.Ft int
192d0353b83SRuslan Ermilov.Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched"
193d0353b83SRuslan Ermilov.Xc
1940f7d6847SJulian ElischerSet the inherit scheduling attribute in a thread attributes object.
195d0353b83SRuslan Ermilov.It Xo
196d0353b83SRuslan Ermilov.Ft int
1978e750fa2SRuslan Ermilov.Fo pthread_attr_setschedparam
1988e750fa2SRuslan Ermilov.Fa "pthread_attr_t *attr" "const struct sched_param *param"
1998e750fa2SRuslan Ermilov.Fc
200d0353b83SRuslan Ermilov.Xc
2010f7d6847SJulian ElischerSet the scheduling parameter attribute in a thread attributes object.
202d0353b83SRuslan Ermilov.It Xo
203d0353b83SRuslan Ermilov.Ft int
204d0353b83SRuslan Ermilov.Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy"
205d0353b83SRuslan Ermilov.Xc
2060f7d6847SJulian ElischerSet the scheduling policy attribute in a thread attributes object.
207d0353b83SRuslan Ermilov.It Xo
208d0353b83SRuslan Ermilov.Ft int
209d0353b83SRuslan Ermilov.Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope"
210d0353b83SRuslan Ermilov.Xc
2110f7d6847SJulian ElischerSet the contention scope attribute in a thread attributes object.
212d0353b83SRuslan Ermilov.It Xo
213d0353b83SRuslan Ermilov.Ft int
214d0353b83SRuslan Ermilov.Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize"
215d0353b83SRuslan Ermilov.Xc
2160f7d6847SJulian ElischerSet the stack size attribute in a thread attributes object.
217d0353b83SRuslan Ermilov.It Xo
218d0353b83SRuslan Ermilov.Ft int
219d0353b83SRuslan Ermilov.Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr"
220d0353b83SRuslan Ermilov.Xc
2210f7d6847SJulian ElischerSet the stack address attribute in a thread attributes object.
222d0353b83SRuslan Ermilov.It Xo
223d0353b83SRuslan Ermilov.Ft int
224d0353b83SRuslan Ermilov.Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate"
225d0353b83SRuslan Ermilov.Xc
2260f7d6847SJulian ElischerSet the detach state in a thread attributes object.
2270f7d6847SJulian Elischer.El
2288e750fa2SRuslan Ermilov.Ss Mutex Routines
2298e750fa2SRuslan Ermilov.Bl -tag -width indent
230d0353b83SRuslan Ermilov.It Xo
231d0353b83SRuslan Ermilov.Ft int
232d0353b83SRuslan Ermilov.Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr"
233d0353b83SRuslan Ermilov.Xc
2340f7d6847SJulian ElischerDestroy a mutex attributes object.
235d0353b83SRuslan Ermilov.It Xo
236d0353b83SRuslan Ermilov.Ft int
237d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprioceiling "pthread_mutexattr_t *attr" "int *ceiling"
238d378717eSMaxim Konovalov.Xc
239d378717eSMaxim KonovalovObtain priority ceiling attribute of mutex attribute object.
240d378717eSMaxim Konovalov.It Xo
241d378717eSMaxim Konovalov.Ft int
242d378717eSMaxim Konovalov.Fn pthread_mutexattr_getprotocol "pthread_mutexattr_t *attr" "int *protocol"
243d378717eSMaxim Konovalov.Xc
244d378717eSMaxim KonovalovObtain protocol attribute of mutex attribute object.
245d378717eSMaxim Konovalov.It Xo
246d378717eSMaxim Konovalov.Ft int
247d378717eSMaxim Konovalov.Fn pthread_mutexattr_gettype "pthread_mutexattr_t *attr" "int *type"
248d378717eSMaxim Konovalov.Xc
249d378717eSMaxim KonovalovObtain the mutex type attribute in the specified mutex attributes object.
250d378717eSMaxim Konovalov.It Xo
251d378717eSMaxim Konovalov.Ft int
252d0353b83SRuslan Ermilov.Fn pthread_mutexattr_init "pthread_mutexattr_t *attr"
253d0353b83SRuslan Ermilov.Xc
2540f7d6847SJulian ElischerInitialize a mutex attributes object with default values.
255d0353b83SRuslan Ermilov.It Xo
256d0353b83SRuslan Ermilov.Ft int
257d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprioceiling "pthread_mutexattr_t *attr" "int ceiling"
258d378717eSMaxim Konovalov.Xc
259d378717eSMaxim KonovalovSet priority ceiling attribute of mutex attribute object.
260d378717eSMaxim Konovalov.It Xo
261d378717eSMaxim Konovalov.Ft int
262d378717eSMaxim Konovalov.Fn pthread_mutexattr_setprotocol "pthread_mutexattr_t *attr" "int protocol"
263d378717eSMaxim Konovalov.Xc
264d378717eSMaxim KonovalovSet protocol attribute of mutex attribute object.
265d378717eSMaxim Konovalov.It Xo
266d378717eSMaxim Konovalov.Ft int
267d378717eSMaxim Konovalov.Fn pthread_mutexattr_settype "pthread_mutexattr_t *attr" "int type"
268d378717eSMaxim Konovalov.Xc
269d378717eSMaxim KonovalovSet the mutex type attribute that is used when a mutex is created.
270d378717eSMaxim Konovalov.It Xo
271d378717eSMaxim Konovalov.Ft int
272d0353b83SRuslan Ermilov.Fn pthread_mutex_destroy "pthread_mutex_t *mutex"
273d0353b83SRuslan Ermilov.Xc
2740f7d6847SJulian ElischerDestroy a mutex.
275d0353b83SRuslan Ermilov.It Xo
276d0353b83SRuslan Ermilov.Ft int
2778e750fa2SRuslan Ermilov.Fo pthread_mutex_init
2788e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr"
2798e750fa2SRuslan Ermilov.Fc
280d0353b83SRuslan Ermilov.Xc
281dfb9495bSTim VanderhoekInitialize a mutex with specified attributes.
282d0353b83SRuslan Ermilov.It Xo
283d0353b83SRuslan Ermilov.Ft int
284d0353b83SRuslan Ermilov.Fn pthread_mutex_lock "pthread_mutex_t *mutex"
285d0353b83SRuslan Ermilov.Xc
2860f7d6847SJulian ElischerLock a mutex and block until it becomes available.
287d0353b83SRuslan Ermilov.It Xo
288d0353b83SRuslan Ermilov.Ft int
2898e750fa2SRuslan Ermilov.Fo pthread_mutex_timedlock
2908e750fa2SRuslan Ermilov.Fa "pthread_mutex_t *mutex" "const struct timespec *abstime"
2918e750fa2SRuslan Ermilov.Fc
2922aa9de1fSMike Makonnen.Xc
2932aa9de1fSMike MakonnenLock a mutex and block until it becomes available or until the timeout expires.
2942aa9de1fSMike Makonnen.It Xo
2952aa9de1fSMike Makonnen.Ft int
296d0353b83SRuslan Ermilov.Fn pthread_mutex_trylock "pthread_mutex_t *mutex"
297d0353b83SRuslan Ermilov.Xc
2980f7d6847SJulian ElischerTry to lock a mutex, but don't block if the mutex is locked by another thread,
2990f7d6847SJulian Elischerincluding the current thread.
300d0353b83SRuslan Ermilov.It Xo
301d0353b83SRuslan Ermilov.Ft int
302d0353b83SRuslan Ermilov.Fn pthread_mutex_unlock "pthread_mutex_t *mutex"
303d0353b83SRuslan Ermilov.Xc
3040f7d6847SJulian ElischerUnlock a mutex.
3050f7d6847SJulian Elischer.El
3068e750fa2SRuslan Ermilov.Ss Condition Variable Routines
3078e750fa2SRuslan Ermilov.Bl -tag -width indent
308d0353b83SRuslan Ermilov.It Xo
309d0353b83SRuslan Ermilov.Ft int
310d0353b83SRuslan Ermilov.Fn pthread_condattr_destroy "pthread_condattr_t *attr"
311d0353b83SRuslan Ermilov.Xc
3120f7d6847SJulian ElischerDestroy a condition variable attributes object.
313d0353b83SRuslan Ermilov.It Xo
314d0353b83SRuslan Ermilov.Ft int
315d378717eSMaxim Konovalov.Fn pthread_condattr_init "pthread_condattr_t *attr"
316d378717eSMaxim Konovalov.Xc
317d378717eSMaxim KonovalovInitialize a condition variable attributes object with default values.
318d378717eSMaxim Konovalov.It Xo
319d378717eSMaxim Konovalov.Ft int
320d0353b83SRuslan Ermilov.Fn pthread_cond_broadcast "pthread_cond_t *cond"
321d0353b83SRuslan Ermilov.Xc
3220f7d6847SJulian ElischerUnblock all threads currently blocked on the specified condition variable.
323d0353b83SRuslan Ermilov.It Xo
324d0353b83SRuslan Ermilov.Ft int
325d0353b83SRuslan Ermilov.Fn pthread_cond_destroy "pthread_cond_t *cond"
326d0353b83SRuslan Ermilov.Xc
3270f7d6847SJulian ElischerDestroy a condition variable.
328d0353b83SRuslan Ermilov.It Xo
329d0353b83SRuslan Ermilov.Ft int
330d0353b83SRuslan Ermilov.Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr"
331d0353b83SRuslan Ermilov.Xc
3320f7d6847SJulian ElischerInitialize a condition variable with specified attributes.
333d0353b83SRuslan Ermilov.It Xo
334d0353b83SRuslan Ermilov.Ft int
335d0353b83SRuslan Ermilov.Fn pthread_cond_signal "pthread_cond_t *cond"
336d0353b83SRuslan Ermilov.Xc
3370f7d6847SJulian ElischerUnblock at least one of the threads blocked on the specified condition variable.
338d0353b83SRuslan Ermilov.It Xo
339d0353b83SRuslan Ermilov.Ft int
3408e750fa2SRuslan Ermilov.Fo pthread_cond_timedwait
3418e750fa2SRuslan Ermilov.Fa "pthread_cond_t *cond" "pthread_mutex_t *mutex"
3428e750fa2SRuslan Ermilov.Fa "const struct timespec *abstime"
3438e750fa2SRuslan Ermilov.Fc
344d0353b83SRuslan Ermilov.Xc
3458e750fa2SRuslan ErmilovWait no longer than the specified time for a condition
3468e750fa2SRuslan Ermilovand lock the specified mutex.
347d0353b83SRuslan Ermilov.It Xo
348d0353b83SRuslan Ermilov.Ft int
349d0353b83SRuslan Ermilov.Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex"
350d0353b83SRuslan Ermilov.Xc
3510f7d6847SJulian ElischerWait for a condition and lock the specified mutex.
3520f7d6847SJulian Elischer.El
3538e750fa2SRuslan Ermilov.Ss Read/Write Lock Routines
3548e750fa2SRuslan Ermilov.Bl -tag -width indent
355d0353b83SRuslan Ermilov.It Xo
356d0353b83SRuslan Ermilov.Ft int
357d0353b83SRuslan Ermilov.Fn pthread_rwlock_destroy "pthread_rwlock_t *lock"
358d0353b83SRuslan Ermilov.Xc
359d4a76febSAlexander LangerDestroy a read/write lock object.
360d0353b83SRuslan Ermilov.It Xo
361d0353b83SRuslan Ermilov.Ft int
3628e750fa2SRuslan Ermilov.Fo pthread_rwlock_init
3638e750fa2SRuslan Ermilov.Fa "pthread_rwlock_t *lock" "const pthread_rwlockattr_t *attr"
3648e750fa2SRuslan Ermilov.Fc
365d0353b83SRuslan Ermilov.Xc
366d4a76febSAlexander LangerInitialize a read/write lock object.
367d0353b83SRuslan Ermilov.It Xo
368d0353b83SRuslan Ermilov.Ft int
369d0353b83SRuslan Ermilov.Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock"
370d0353b83SRuslan Ermilov.Xc
371d4a76febSAlexander LangerLock a read/write lock for reading, blocking until the lock can be
372d4a76febSAlexander Langeracquired.
373d0353b83SRuslan Ermilov.It Xo
374d0353b83SRuslan Ermilov.Ft int
375d0353b83SRuslan Ermilov.Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock"
376d0353b83SRuslan Ermilov.Xc
377d4a76febSAlexander LangerAttempt to lock a read/write lock for reading, without blocking if the
378d4a76febSAlexander Langerlock is unavailable.
379d0353b83SRuslan Ermilov.It Xo
380d0353b83SRuslan Ermilov.Ft int
381d0353b83SRuslan Ermilov.Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock"
382d0353b83SRuslan Ermilov.Xc
383d4a76febSAlexander LangerAttempt to lock a read/write lock for writing, without blocking if the
384d4a76febSAlexander Langerlock is unavailable.
385d0353b83SRuslan Ermilov.It Xo
386d0353b83SRuslan Ermilov.Ft int
387d0353b83SRuslan Ermilov.Fn pthread_rwlock_unlock "pthread_rwlock_t *lock"
388d0353b83SRuslan Ermilov.Xc
389d4a76febSAlexander LangerUnlock a read/write lock.
390d0353b83SRuslan Ermilov.It Xo
391d0353b83SRuslan Ermilov.Ft int
392d0353b83SRuslan Ermilov.Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock"
393d0353b83SRuslan Ermilov.Xc
394d4a76febSAlexander LangerLock a read/write lock for writing, blocking until the lock can be
395d4a76febSAlexander Langeracquired.
396d0353b83SRuslan Ermilov.It Xo
397d0353b83SRuslan Ermilov.Ft int
398d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr"
399d0353b83SRuslan Ermilov.Xc
400d4a76febSAlexander LangerDestroy a read/write lock attribute object.
401d0353b83SRuslan Ermilov.It Xo
402d0353b83SRuslan Ermilov.Ft int
4038e750fa2SRuslan Ermilov.Fo pthread_rwlockattr_getpshared
4048e750fa2SRuslan Ermilov.Fa "const pthread_rwlockattr_t *attr" "int *pshared"
4058e750fa2SRuslan Ermilov.Fc
406d0353b83SRuslan Ermilov.Xc
407d4a76febSAlexander LangerRetrieve the process shared setting for the read/write lock attribute
408d4a76febSAlexander Langerobject.
409d0353b83SRuslan Ermilov.It Xo
410d0353b83SRuslan Ermilov.Ft int
411d0353b83SRuslan Ermilov.Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr"
412d0353b83SRuslan Ermilov.Xc
413d4a76febSAlexander LangerInitialize a read/write lock attribute object.
414d0353b83SRuslan Ermilov.It Xo
415d0353b83SRuslan Ermilov.Ft int
416c70db3ffSBruce Evans.Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int pshared"
417d0353b83SRuslan Ermilov.Xc
418d4a76febSAlexander LangerSet the process shared setting for the read/write lock attribute object.
419d4a76febSAlexander Langer.El
4208e750fa2SRuslan Ermilov.Ss Per-Thread Context Routines
4218e750fa2SRuslan Ermilov.Bl -tag -width indent
422d0353b83SRuslan Ermilov.It Xo
423d0353b83SRuslan Ermilov.Ft int
4248e750fa2SRuslan Ermilov.Fn pthread_key_create "pthread_key_t *key" "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]"
425d0353b83SRuslan Ermilov.Xc
4260f7d6847SJulian ElischerCreate a thread-specific data key.
427d0353b83SRuslan Ermilov.It Xo
428d0353b83SRuslan Ermilov.Ft int
429d0353b83SRuslan Ermilov.Fn pthread_key_delete "pthread_key_t key"
430d0353b83SRuslan Ermilov.Xc
4310f7d6847SJulian ElischerDelete a thread-specific data key.
432d0353b83SRuslan Ermilov.It Xo
433d0353b83SRuslan Ermilov.Ft "void *"
434c70db3ffSBruce Evans.Fn pthread_getspecific "pthread_key_t key"
435d0353b83SRuslan Ermilov.Xc
4360f7d6847SJulian ElischerGet the thread-specific value for the specified key.
437d0353b83SRuslan Ermilov.It Xo
438d0353b83SRuslan Ermilov.Ft int
439d0353b83SRuslan Ermilov.Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr"
440d0353b83SRuslan Ermilov.Xc
4410f7d6847SJulian ElischerSet the thread-specific value for the specified key.
4420f7d6847SJulian Elischer.El
4438e750fa2SRuslan Ermilov.Ss Cleanup Routines
4448e750fa2SRuslan Ermilov.Bl -tag -width indent
445d0353b83SRuslan Ermilov.It Xo
446d0353b83SRuslan Ermilov.Ft void
447d0353b83SRuslan Ermilov.Fn pthread_cleanup_pop "int execute"
448d0353b83SRuslan Ermilov.Xc
4490f7d6847SJulian ElischerRemove the routine at the top of the calling thread's cancellation cleanup
4500f7d6847SJulian Elischerstack and optionally invoke it.
451d0353b83SRuslan Ermilov.It Xo
452d0353b83SRuslan Ermilov.Ft void
4538e750fa2SRuslan Ermilov.Fn pthread_cleanup_push "void \*[lp]*routine\*[rp]\*[lp]void *\*[rp]" "void *routine_arg"
454d0353b83SRuslan Ermilov.Xc
4550f7d6847SJulian ElischerPush the specified cancellation cleanup handler onto the calling thread's
4560f7d6847SJulian Elischercancellation stack.
4570f7d6847SJulian Elischer.El
4580f7d6847SJulian Elischer.Sh INSTALLATION
459b5c508fbSRuslan ErmilovThe current
460b5c508fbSRuslan Ermilov.Fx
461b5c508fbSRuslan ErmilovPOSIX thread implementation is built in the library
4620f7d6847SJulian Elischer.Fa libc_r
4630f7d6847SJulian Elischerwhich contains both thread-safe libc functions and the thread functions.
4640f7d6847SJulian ElischerThis library replaces
4650f7d6847SJulian Elischer.Fa libc
4660f7d6847SJulian Elischerfor threaded applications.
4670f7d6847SJulian Elischer.Pp
4680f7d6847SJulian ElischerBy default,
4690f7d6847SJulian Elischer.Fa libc_r
4708e750fa2SRuslan Ermilovis built as part of a 'make world'.
4718e750fa2SRuslan ErmilovTo disable the build of
4720f7d6847SJulian Elischer.Fa libc_r
473106115b3SSteve Priceyou must supply the '-DNOLIBC_R' option to
474106115b3SSteve Price.Xr make 1 .
475087ee430SJohn Birrell.Pp
476b5c508fbSRuslan ErmilovA
477b5c508fbSRuslan Ermilov.Fx
478b5c508fbSRuslan Ermilovspecific option has been added to gcc to make linking
479087ee430SJohn Birrellthreaded processes simple.
480087ee430SJohn Birrell.Fa gcc -pthread
481087ee430SJohn Birrelllinks a threaded process against
482087ee430SJohn Birrell.Fa libc_r
483087ee430SJohn Birrellinstead of
484087ee430SJohn Birrell.Fa libc .
485997d90beSBill Swingle.Sh SEE ALSO
4865521ff5aSRuslan Ermilov.Xr pthread_cleanup_pop 3 ,
4875521ff5aSRuslan Ermilov.Xr pthread_cleanup_push 3 ,
488c8d40b7dSRuslan Ermilov.Xr pthread_condattr_destroy 3 ,
489c8d40b7dSRuslan Ermilov.Xr pthread_condattr_init 3 ,
490997d90beSBill Swingle.Xr pthread_cond_broadcast 3 ,
491997d90beSBill Swingle.Xr pthread_cond_destroy 3 ,
492997d90beSBill Swingle.Xr pthread_cond_init 3 ,
493997d90beSBill Swingle.Xr pthread_cond_signal 3 ,
494997d90beSBill Swingle.Xr pthread_cond_timedwait 3 ,
495997d90beSBill Swingle.Xr pthread_cond_wait 3 ,
4965521ff5aSRuslan Ermilov.Xr pthread_create 3 ,
4975521ff5aSRuslan Ermilov.Xr pthread_detach 3 ,
4985521ff5aSRuslan Ermilov.Xr pthread_equal 3 ,
4995521ff5aSRuslan Ermilov.Xr pthread_exit 3 ,
5005521ff5aSRuslan Ermilov.Xr pthread_getspecific 3 ,
5015521ff5aSRuslan Ermilov.Xr pthread_join 3 ,
5025521ff5aSRuslan Ermilov.Xr pthread_key_delete 3 ,
503d378717eSMaxim Konovalov.Xr pthread_kill 3 ,
504d378717eSMaxim Konovalov.Xr pthread_mutexattr_destroy 3 ,
505d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprioceiling 3 ,
506d378717eSMaxim Konovalov.Xr pthread_mutexattr_getprotocol 3 ,
507d378717eSMaxim Konovalov.Xr pthread_mutexattr_gettype 3 ,
508d378717eSMaxim Konovalov.Xr pthread_mutexattr_init 3 ,
509d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprioceiling 3 ,
510d378717eSMaxim Konovalov.Xr pthread_mutexattr_setprotocol 3 ,
511d378717eSMaxim Konovalov.Xr pthread_mutexattr_settype 3 ,
512c8d40b7dSRuslan Ermilov.Xr pthread_mutex_destroy 3 ,
513c8d40b7dSRuslan Ermilov.Xr pthread_mutex_init 3 ,
514c8d40b7dSRuslan Ermilov.Xr pthread_mutex_lock 3 ,
515c8d40b7dSRuslan Ermilov.Xr pthread_mutex_trylock 3 ,
516c8d40b7dSRuslan Ermilov.Xr pthread_mutex_unlock 3 ,
5175521ff5aSRuslan Ermilov.Xr pthread_once 3 ,
5185521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_destroy 3 ,
5195521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_getpshared 3 ,
5205521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_init 3 ,
5215521ff5aSRuslan Ermilov.Xr pthread_rwlockattr_setpshared 3 ,
522997d90beSBill Swingle.Xr pthread_rwlock_destroy 3 ,
523997d90beSBill Swingle.Xr pthread_rwlock_init 3 ,
524997d90beSBill Swingle.Xr pthread_rwlock_rdlock 3 ,
525997d90beSBill Swingle.Xr pthread_rwlock_unlock 3 ,
526997d90beSBill Swingle.Xr pthread_rwlock_wrlock 3 ,
5275521ff5aSRuslan Ermilov.Xr pthread_self 3 ,
528d378717eSMaxim Konovalov.Xr pthread_setcancelstate 3 ,
529d378717eSMaxim Konovalov.Xr pthread_setcanceltype 3 ,
530d378717eSMaxim Konovalov.Xr pthread_setspecific 3 ,
531d378717eSMaxim Konovalov.Xr pthread_testcancel 3
5320f7d6847SJulian Elischer.Sh STANDARDS
5330f7d6847SJulian ElischerThe functions in
5340f7d6847SJulian Elischer.Fa libc_r
5350f7d6847SJulian Elischerwith the
5360f7d6847SJulian Elischer.Fa pthread_
537efc0456fSAlexander Langerprefix and not
5380f7d6847SJulian Elischer.Fa _np
539d4a76febSAlexander Langersuffix or
540d4a76febSAlexander Langer.Fa pthread_rwlock
5413c233756SRuslan Ermilovprefix conform to
5423c233756SRuslan Ermilov.St -p1003.1-96 .
5430f7d6847SJulian Elischer.Pp
5440f7d6847SJulian ElischerThe functions in libc_r with the
5450f7d6847SJulian Elischer.Fa pthread_
5460f7d6847SJulian Elischerprefix and
5470f7d6847SJulian Elischer.Fa _np
5480f7d6847SJulian Elischersuffix are non-portable extensions to POSIX threads.
549d4a76febSAlexander Langer.Pp
550d4a76febSAlexander LangerThe functions in libc_r with the
551d4a76febSAlexander Langer.Fa pthread_rwlock
5523c233756SRuslan Ermilovprefix are extensions created by The Open Group as part of the
5533c233756SRuslan Ermilov.St -susv2 .
554