pthread_join(3THR) 関数は、スレッドの終了を待ちます。
プロトタイプ: int pthread_join(thread_t tid, void **status); |
#include <pthread.h> pthread_t tid; int ret; void *status; /* スレッド「tid」の終了待ち、status の指定あり */ ret = pthread_join(tid, &status); /* スレッド「tid」の終了待ち、status の指定は NULL */ ret = pthread_join(tid, NULL); |
pthread_join() 関数は、指定したスレッドが終了するまで呼び出しスレッドをブロックします。
指定するスレッドは、現在のプロセス内のスレッドで、しかも切り離されていないものでなければなりません。スレッドの切り離しについては、切り離し状態の設定を参照してください。
status が NULL でなければ、pthread_join() の正常終了時に status の指す記憶場所に終了したスレッドの終了状態が格納されます。
複数のスレッドが同一スレッドの終了を待機している場合は、そのスレッドが終了すると、待機していた 1 つのスレッドが正常終了し、その他のスレッドは失敗して ESRCH エラーを返します。
pthread_join() の復帰後は、そのスレッドに関連付けられていたデータ領域がそのアプリケーションで再利用できるようになります。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、pthread_join() は失敗し、次の値を返します。
pthread_join() は、切り離されていないスレッドに対してだけ有効であることに注意してください。終了時のタイミングで特に同期をとる必要がないスレッドは、切り離して生成してください。