The pthread_join function suspends execution of the calling thread until the target thread terminates unless the target thread has already terminated.
On return from a successful pthread_join call with a non-NULL value_ptr argument, the value passed to pthread_exit by the terminating thread is stored in the location referenced by value_ptr. When a pthread_join returns successfully, the target thread has been terminated. The results of multiple simultaneous calls to pthread_join specifying the same target thread are undefined. If the thread calling pthread_join is cancelled, then the target thread is not detached.
A thread that has exited but remains unjoined counts against [_POSIX_THREAD_THREADS_MAX].
If successful, the pthread_join function will return zero. Otherwise an error number will be returned to indicate the error.
The pthread_join function will fail if: