PTHREAD_JOIN(3) | FreeBSD Library Functions Manual | PTHREAD_JOIN(3) |
名称
pthread_join, pthread_timedjoin_np — スレッドの終了をウェート (待つ) するライブラリ
POSIX Threads Library (libpthread, -lpthread)書式
#include < pthread.h> int
pthread_join( pthread_t thread, void **value_ptr);
int
pthread_timedjoin_np( pthread_t thread, void **value_ptr, const struct timespec *abstime);
解説
pthread_join() 関数は、ターゲットの thread がまだ終了していなければ、ターゲットの thread が終了するまで、呼び出しているスレッドの実行を保留します。NULL でない value_ptr 引数を付けて pthread_join() の呼び出しから成功して返るとき、終了しているスレッドによって pthread_exit() に渡された値は、 value_ptr によって参照される場所に格納されます。 pthread_join() が成功して返るとき、ターゲットのスレッドは、終了しました。同じターゲットのスレッドを指定する pthread_join() への多数の同時に起こる呼び出しの結果は、未定義です。 pthread_join() を呼び出しているスレッドが取り消されるなら、ターゲットのスレッドは、デタッチされません。
pthread_timedjoin_np() 関数は、ターゲットのスレッドが指定された絶対時間が経過する前に、終了していないなら、 ETIMEDOUT を返すことを除いて、 pthread_join() 関数と同等です。
終了したが、結合されずに残っているスレッドは、 [_POSIX_THREAD_THREADS_MAX] に対してカウントされます。
戻り値
成功したなら、 pthread_join() と pthread_timedjoin_np() 関数は、0 を返します。そうでなければ、エラー番号がエラーを示すために返されます。エラー
pthread_join() と pthread_timedjoin_np() 関数は、次の場合に失敗します:- [ EINVAL]
- 実装は、 thread によって指定された値が、結合可能なスレッドを参照していないことを検出しました。
- [ ESRCH]
- 与えられたスレッド ID thread によって指定されたものと対応するスレッドを見つけることができません。
- [ EDEADLK]
- デッドロックが検出されたか、または、 thread の値が呼び出しているスレッドを指定しています。
- [ EOPNOTSUPP]
- 実装は、別の呼び出し側が thread で既にウェート (待つ) していることが検出されました。
さらに、 pthread_timedjoin_np() 関数は、次の場合に失敗します:
- [ ETIMEDOUT]
- pthread_timedjoin_np() が、スレッドの終了をウェート (待つ) している間に、指定された絶対時間が経過しました。
規格
pthread_join() 関数は、 ISO/IEC 9945-1:1996 (“POSIX.1”) に適合しています。 pthread_timedjoin_np() は、 FreeBSD 6.1 ではじめて登場した、 FreeBSD の拡張です。January 23, 2010 | FreeBSD |