cc –mt [ flag... ] file...– lpthread [ library... ] #include <pthread.h>int pthread_join(pthread_t thread, void **value_ptr);
The pthread_join() function suspends processing of the calling thread until the target thread completes. thread must be a member of the current process and it cannot be a detached or daemon thread. See pthread_create(3THR).
Several threads cannot wait for the same thread to complete; one thread will complete successfully and the others will terminate with an error of ESRCH. pthread_join() will not block processing of the calling thread if the target thread has already terminated.
pthread_join() returns successfully when the target thread terminates. If a pthread_join() call returns successfully with a non-null status argument, the value passed to pthread_exit(3THR) by the terminating thread will be placed in the location referenced by status.
If the pthread_join() calling thread is cancelled, then the target thread will remain joinable by pthread_join(). However, the calling thread may set up a cancellation cleanup handler on thread prior to the join call, which may detach the target thread by calling pthread_detach(3THR). (See pthread_detach(3THR) and pthread_cancel(3THR).)
If successful, the pthread_join() function returns 0. Otherwise, an error number is returned to indicate the error.
The pthread_join() function will fail if:
The implementation has detected that the value specified by thread does not refer to a joinable thread.
No thread could be found corresponding to that specified by the given thread ID.
The pthread_join() function may fail if:
A recursive deadlock was detected, the value of thread specifies the calling thread.
See attributes(5) for descriptions of the following attributes:
|ATTRIBUTE TYPE||ATTRIBUTE VALUE|
pthread_join(3THR), must specify the thread ID for whose termination it will wait.
Calling pthread_join() also "detaches" the thread, that is, pthread_join() includes the effect of pthread_detach(). Hence, if a thread were to be cancelled when blocked in pthread_join(), an explicit detach would have to be done in the cancellation cleanup handler. In fact, the routine pthread_detach() exists mainly for this reason.