マルチスレッドのプログラミング

pthread_join の構文

スレッドの終了待ちを行うには、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); 

指定するスレッドは、現在のプロセス内のスレッドで、しかも切り離されていないものでなければなりません。スレッドの切り離しについては、「切り離し状態の設定」を参照してください。

statusNULL でなければ、pthread_join() の正常終了時に status の指す記憶場所に終了したスレッドの終了状態が格納されます。

複数のスレッドが同じスレッドの終了を待つ場合、すべてのスレッドはそのスレッドが終了するまで待機します。そして、待機しているスレッドの 1 つが成功を返します。待機しているほかのスレッドは ESRCH エラーを返して失敗します。

pthread_join() の復帰後は、終了したスレッドに関連付けられていたデータ領域がそのアプリケーションで再利用できるようになります。