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_return が
NULL でないときには、
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).