スレッドの終了待ちを行うには、pthread_join(3C) を使用します。
int pthread_join(pthread_t tid, void **status);
#include <pthread.h> pthread_t tid; int ret; void *status; /* waiting to join thread "tid" with status */ ret = pthread_join(tid, &status); /* waiting to join thread "tid" without status */ ret = pthread_join(tid, NULL);
指定するスレッドは、現在のプロセス内のスレッドで、しかも切り離されていないものでなければなりません。スレッドの切り離しについては、「切り離し状態の設定」を参照してください。
status が NULL でなければ、pthread_join() の正常終了時に status の指す記憶場所に終了したスレッドの終了状態が格納されます。
複数のスレッドが同じスレッドの終了を待つ場合、すべてのスレッドはそのスレッドが終了するまで待機します。そして、待機しているスレッドの 1 つが成功を返します。待機しているほかのスレッドは ESRCH エラーを返して失敗します。
pthread_join() の復帰後は、終了したスレッドに関連付けられていたデータ領域がそのアプリケーションで再利用できるようになります。