#include <thread.h> int thr_join(thread_t tid, thread_t *departedid, void **status);
The target thread must be a member of the current process. The target thread cannot be a detached thread or a daemon thread.
Several threads cannot wait for the same thread to complete. One thread will complete successfully. The others will terminate with an ESRCH error.
thr_join() will not block processing of the calling thread if the target thread has already terminated.
#include <thread.h> thread_t tid; thread_t departedid; int ret; void *status; /* waiting to join thread "tid" with status */ ret = thr_join(tid, &departedid, &status); /* waiting to join thread "tid" without status */ ret = thr_join(tid, &departedid, NULL); /* waiting to join thread "tid" without return id and status */ ret = thr_join(tid, NULL, NULL);
When the tid is (thread_t)0
, then
thread_join() waits for any undetached thread in the process
to terminate. In other words, when no thread identifier is specified, any
undetached thread that exits causes thread_join() to return.
#include <thread.h> thread_t tid; thread_t departedid; int ret; void *status; /* waiting to join any non-detached thread with status */ ret = thr_join(0, &departedid, &status);
By indicating 0 as the thread ID in the Solaris thr_join(), a join takes place when any non detached thread in the process exits. The departedid indicates the thread ID of the exiting thread.