EN JA
PTHREAD_JOIN(3)
PTHREAD_JOIN(3) FreeBSD Library Functions Manual PTHREAD_JOIN(3)

名前

pthread_join -別のスレッドの終了を待つ
 

書式

#include <pthread.h>
 
int pthread_join(pthread_t th , void ** thread_return );
 

説明

pthread_join は、呼び出しスレッドの実行を停止し、 th で指定したスレッドが pthread_exit(3) を呼び出して終了するか、取り消しされて終了するのを待つ。
 
thread_returnNULL でないときには、 th の返り値が thread_return で指し示される領域に格納される。 th の返り値は、 pthread_exit(3) に与えられた引数、または PTHREAD_CANCELED( th が取り消しされた場合 ) である。
 
合流 (join) されるスレッド th は、合流可能 (joinable) な状態でなければならない。すなわち、 pthread_detach(3) を使用してデタッチ (detach) されていたり、 pthread_create(3) で属性 PTHREAD_CREATE_DETACHED を与えられていたりしてはならない。
 
合流可能なスレッドが終了しても、別のスレッドがそのスレッドに対して pthread_join を呼び出すまでは、そのメモリ資源 (スレッドディスクリプタとスタック) は解放されない。したがって、メモリリークを防ぐためには、合流可能なスレッドそれぞれに対して pthread_join を 1 回ずつ呼び出さなければならない。
 
あるスレッドの終了を待つことができるスレッドは高々 1 つである。すでに別のスレッドが終了を待っているスレッド th に対して pthread_join を呼び出した場合、エラーが返る。
 

取り消し

pthread_join は取り消しポイントである。スレッドが pthread_join で停止しているときに取り消しされると、直ちに実行が再開されてスレッド th が終了するのを待つことなく取り消しが実行される。取り消しが pthread_join で起こった場合には、スレッド th は合流されずに残ることになる。
 

返り値

成功すると、 th の返り値が thread_return で指し示された領域に格納され、0 が返る。エラーの場合、非 0 のエラーコードが返る。
 

エラー

ESRCH
th で指定された ID に対応するスレッドが見つからなかった。
EINVAL
th で指定されたスレッドはすでにデタッチされている。
EINVAL
すでに別のスレッドがスレッド th の終了を待っている。
EDEADLK
引数 th が呼び出しスレッドを指している。
 

著者

Xavier Leroy <Xavier.Leroy@inria.fr>
 

関連項目

pthread_exit(3), pthread_detach(3), pthread_create(3), pthread_attr_setdetachstate(3), pthread_cleanup_push(3), pthread_key_create(3).
LinuxThreads