Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

wait(2)

pthread_create(3T)

pthread_exit(3T)

pthread_join(3T)

pthread_join(3T)

NAME

pthread_join, thr_join − wait for thread termination

SYNOPSIS

POSIX

cc [ flag ... ] file ... −lpthread [ library ... ]

#include <pthread.h>
int pthread_join(pthread_t target_thread, void ∗∗status);

Solaris

cc [ flag ... ] file ... −lthread [ library ... ]

#include <thread.h>
int thr_join(thread_t target_thread, thread_t ∗departed, void ∗∗status);

MT-LEVEL

MT-Safe

DESCRIPTION

The pthread_join() and thr_join() functions suspend processing of the calling thread until the target target_thread completes.  target_thread must be a member of the current process and it cannot be a detached or daemon thread (see pthread_create(3T)). 

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() or thr_join() will not block processing of the calling thread if the target target_thread has already terminated. 

pthread_join() or thr_join() will return successfully when the target target_thread terminates. 

POSIX

If a pthread_join() call returns successfully with a non-null status argument, the value passed to pthread_exit(3T) by the terminating thread will be placed in the location referenced by status.

If the pthread_join() calling thread is cancelled, then the target target_thread will remain joinable by pthread_join().  However, the calling thread may set up a cancellation cleanup handler on target_thread prior to the join call, which may detach the target thread by calling pthread_detach(3T).  (See pthread_detach(3T) and pthread_cancel(3T).) 

pthread_join() does not return the target_thread’s ID, as does the Solaris threads’ function thr_join(), and it does not cause the calling thread to wait for detached threads.  pthread_join() returns ESRCH if the target is detached. 

Solaris

If a thr_join() call returns successfully with a non-null status argument, the value passed to thr_exit(3T) by the terminating thread will be placed in the location referenced by status.

If the target target_thread ID is 0, thr_join() waits for any undetached thread in the process to terminate. 

If departed is not NULL, it points to a location that is set to the ID of the terminated thread if thr_join() returns successfully. 

RETURN VALUES

If successful, both pthread_join() and thr_join() would return 0; otherwise, an error number is returned to indicate the error. 

ERRORS

ESRCH No undetached thread could be found corresponding to that specified by the given thread ID. 

If the target target_thread ID is 0, pthread_join() will return with error ESRCH. 

EDEADLK A deadlock was detected or the value of target_thread specifies the calling thread.  (See NOTES
 section below.)

SEE ALSO

wait(2), pthread_create(3T), pthread_exit(3T), pthread_join(3T)

NOTES

Using thr_join(3T) in the following syntax,

while (thr_join(NULL, NULL, NULL) == 0);

will wait for the termination of all other undetached and non-daemon threads; after which, EDEADLK will be returned. 

pthread_join(3T), on the other hand, must specify the target_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. 

SunOS 5.5/SPARC  —  Last change: 30 Jun 1995

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026