.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
-.TH PTHREAD_JOIN 3 2008-11-27 "Linux" "Linux Programmer's Manual"
+.TH PTHREAD_JOIN 3 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_join \- join with a terminated thread
.SH SYNOPSIS
.nf
.B #include <pthread.h>
-
+.PP
.BI "int pthread_join(pthread_t " thread ", void **" retval );
.fi
-.sp
+.PP
Compile and link with \fI\-pthread\fP.
.SH DESCRIPTION
The
The thread specified by
.I thread
must be joinable.
-
+.PP
If
.I retval
is not NULL, then
(i.e., the value that the target thread supplied to
.BR pthread_exit (3))
into the location pointed to by
-.IR *retval .
+.IR retval .
If the target thread was canceled, then
.B PTHREAD_CANCELED
-is placed in
-.IR *retval .
-
+is placed in the location pointed to by
+.IR retval .
+.PP
If multiple threads simultaneously try to join with the same thread,
the results are undefined.
If the thread calling
No thread with the ID
.I thread
could be found.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR pthread_join ()
+T} Thread safety MT-Safe
+.TE
+.sp 1
.SH CONFORMING TO
-POSIX.1-2001.
+POSIX.1-2001, POSIX.1-2008.
.SH NOTES
After a successful call to
.BR pthread_join (),
the caller is guaranteed that the target thread has terminated.
-
+The caller may then choose to do any clean-up that is required
+after termination of the thread (e.g., freeing memory or other
+resources that were allocated to the target thread).
+.PP
Joining with a thread that has previously been joined results in
undefined behavior.
-
+.PP
Failure to join with a thread that is joinable
(i.e., one that is not detached),
produces a "zombie thread".
since each zombie thread consumes some system resources,
and when enough zombie threads have accumulated,
it will no longer be possible to create new threads (or processes).
-
+.PP
There is no pthreads analog of
.IR "waitpid(-1,\ &status,\ 0)" ,
that is, "join with any terminated thread".
If you believe you need this functionality,
you probably need to rethink your application design.
-
+.PP
All of the threads in a process are peers:
any thread can join with any other thread in the process.
.SH EXAMPLE