'\" te .\" Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. .\" Copyright (c) 2001, the Institute of Electrical and Electronics Engineers, Inc. and The Open Group. All Rights Reserved. .\" Copyright 1991, 1992, 1994, The X/Open Company Ltd. .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation. Original documentation from The Open Group can be obtained online at http://www.opengroup.org/bookstore/. .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation. In the following statement, the phrase "this text" refers to portions of the system documentation. Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html. This notice shall appear on any product containing this material. .TH pthread_join 3C "11 Jan 2012" "SunOS 5.11" "Standard C Library Functions" .SH NAME pthread_join \- wait for thread termination .SH SYNOPSIS .LP .nf cc -mt [ \fIflag\fR... ] \fIfile\fR... [ \fIlibrary\fR... ] #include \fBint\fR \fBpthread_join\fR(\fBpthread_t\fR \fIthread\fR, \fBvoid **\fR\fIstatus\fR); .fi .SH DESCRIPTION .sp .LP The \fBpthread_join()\fR function suspends processing of the calling thread until the target \fIthread\fR completes. \fIthread\fR must be a member of the current process and it cannot be a detached thread. See \fBpthread_create\fR(3C). .sp .LP If two or more threads wait for the same thread to complete, all will suspend processing until the thread has terminated, and then one thread will return successfully and the others will return with an error of \fBESRCH\fR. The \fBpthread_join()\fR function will not block processing of the calling thread if the target \fIthread\fR has already terminated. .sp .LP If a \fBpthread_join()\fR call returns successfully with a non-null \fIstatus\fR argument, the value passed to \fBpthread_exit\fR(3C) by the terminating thread will be placed in the location referenced by \fIstatus\fR. .sp .LP If the \fBpthread_join()\fR calling thread is cancelled, then the target \fIthread\fR will remain joinable by \fBpthread_join()\fR. However, the calling thread may set up a cancellation cleanup handler on \fIthread\fR prior to the join call, which may detach the target \fIthread\fR by calling \fBpthread_detach\fR(3C). See \fBpthread_detach\fR(3C) and \fBpthread_cancel\fR(3C). .SH RETURN VALUES .sp .LP If successful, \fBpthread_join()\fR returns \fB0\fR. Otherwise, an error number is returned to indicate the error. .SH ERRORS .sp .ne 2 .mk .na \fB\fBEDEADLK\fR\fR .ad .RS 11n .rt A joining deadlock would occur, such as when a thread attempts to wait for itself. .RE .sp .ne 2 .mk .na \fB\fBEINVAL\fR\fR .ad .RS 11n .rt The thread corresponding to the given thread ID is a detached thread. .RE .sp .ne 2 .mk .na \fB\fBESRCH\fR\fR .ad .RS 11n .rt No thread could be found corresponding to the given thread ID. .RE .SH ATTRIBUTES .sp .LP See \fBattributes\fR(5) for descriptions of the following attributes: .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . ATTRIBUTE TYPEATTRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelMT-Safe _ StandardSee \fBstandards\fR(5). .TE .SH SEE ALSO .sp .LP \fBpthread_cancel\fR(3C), \fBpthread_create\fR(3C), \fBpthread_detach\fR(3C), \fBpthread_exit\fR(3C), \fBwait\fR(3C), \fBattributes\fR(5), \fBstandards\fR(5) .SH NOTES .sp .LP The pthread_join(3C) function must specify the \fIthread\fR \fBID\fR for whose termination it will wait. .sp .LP Calling \fBpthread_join()\fR also "detaches" the thread; that is, \fBpthread_join()\fR includes the effect of the \fBpthread_detach()\fR function. If a thread were to be cancelled when blocked in \fBpthread_join()\fR, an explicit detach would have to be performed in the cancellation cleanup handler. The \fBpthread_detach()\fR function exists primarily for this purpose.