xref: /freebsd/share/man/man3/pthread_join.3 (revision 2e4311906d8c8dc7a7c726345268253bca6d4acc)
1.\" Copyright (c) 1996-1998 John Birrell <jb@cimlogic.com.au>.
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by John Birrell.
15.\" 4. Neither the name of the author nor the names of any co-contributors
16.\"    may be used to endorse or promote products derived from this software
17.\"    without specific prior written permission.
18.\"
19.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
20.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29.\" SUCH DAMAGE.
30.\"
31.\" $FreeBSD$
32.\"
33.Dd October 12, 2021
34.Dt PTHREAD_JOIN 3
35.Os
36.Sh NAME
37.Nm pthread_join ,
38.Nm pthread_peekjoin_np ,
39.Nm pthread_timedjoin_np
40.Nd inspect thread termination state
41.Sh LIBRARY
42.Lb libpthread
43.Sh SYNOPSIS
44.In pthread.h
45.Ft int
46.Fn pthread_join "pthread_t thread" "void **value_ptr"
47.In pthread_np.h
48.Ft int
49.Fo pthread_peekjoin_np
50.Fa "pthread_t thread"
51.Fa "void **value_ptr"
52.Fc
53.Ft int
54.Fo pthread_timedjoin_np
55.Fa "pthread_t thread"
56.Fa "void **value_ptr"
57.Fa "const struct timespec *abstime"
58.Fc
59.Sh DESCRIPTION
60The
61.Fn pthread_join
62function suspends execution of the calling thread until the target
63.Fa thread
64terminates unless the target
65.Fa thread
66has already terminated.
67.Pp
68On return from a successful
69.Fn pthread_join
70call with a non-NULL
71.Fa value_ptr
72argument, the value passed to
73.Fn pthread_exit
74by the terminating thread is stored in the location referenced by
75.Fa value_ptr .
76When a
77.Fn pthread_join
78returns successfully, the target thread has been terminated.
79The results
80of multiple simultaneous calls to
81.Fn pthread_join
82specifying the same target thread are undefined.
83If the thread calling
84.Fn pthread_join
85is cancelled, then the target thread is not detached.
86.Pp
87The
88.Fn pthread_timedjoin_np
89function is equivalent to the
90.Fn pthread_join
91function except it will return
92.Er ETIMEDOUT
93if target thread does not exit before specified absolute time passes.
94.Pp
95The
96.Fn pthread_peekjoin_np
97only peeks into the exit status of the specified thread.
98If the thread has not exited, the
99.Er EBUSY
100error is returned.
101Otherwise, zero is returned and the thread exit value is optionally stored
102into the location of
103.Fa *value_ptr .
104The target thread is left unjoined and can be used as an argument for
105the
106.Fn pthread_join
107family of functions again.
108.Pp
109A thread that has exited but remains unjoined counts against
110[_POSIX_THREAD_THREADS_MAX].
111.Sh RETURN VALUES
112If successful, the described functions return zero.
113Otherwise an error number is returned to indicate the error or
114special condition.
115.Sh ERRORS
116The
117.Fn pthread_join ,
118.Fn pthread_peekjoin_np ,
119and
120.Fn pthread_timedjoin_np
121functions will fail if:
122.Bl -tag -width Er
123.It Bq Er EINVAL
124The implementation has detected that the value specified by
125.Fa thread
126does not refer to a joinable thread.
127.It Bq Er ESRCH
128No thread could be found corresponding to that specified by the given
129thread ID,
130.Fa thread .
131.It Bq Er EDEADLK
132A deadlock was detected or the value of
133.Fa thread
134specifies the calling thread.
135.It Bq Er EOPNOTSUPP
136The implementation detected that another caller is already waiting on
137.Fa thread .
138.El
139.Pp
140Additionally, the
141.Fn pthread_timedjoin_np
142function will fail if:
143.Bl -tag -width Er
144.It Bq Er ETIMEDOUT
145The specified absolute time passed while
146.Fn pthread_timedjoin_np
147waited for thread exit.
148.El
149.Pp
150The
151.Fn pthread_peekjoin_np
152function will also fail if:
153.Bl -tag -width Er
154.It Bq Er EBUSY
155The specified thread has not yet exited.
156.El
157.Sh SEE ALSO
158.Xr wait 2 ,
159.Xr pthread 3 ,
160.Xr pthread_create 3 ,
161.Xr pthread_np 3
162.Sh STANDARDS
163The
164.Fn pthread_join
165function conforms to
166.St -p1003.1-96 .
167The
168.Fn pthread_timedjoin_np
169function is a
170.Fx
171extension which first appeared in
172.Fx 6.1 .
173Another extension, the
174.Fn pthread_peekjoin_np
175function, first appearead in
176.Fx 13.0 .
177