pthread_join または pthread_detach サブルーチン

目的

指定されたスレッドが終了するまで、呼び出しスレッドをブロックまたは切り離します。

ライブラリー

スレッド・ライブラリー (libpthreads.a)

構文

#include <pthread.h>

int pthread_join (thread, status)
pthread_t thread;
void **status;

int pthread_detach (thread)
pthread_t thread;

説明

pthread_join サブルーチンは、スレッド thread が終了するまで、呼び出しスレッドをブロックします。 ターゲット・スレッドの終了状況は、 status パラメーターで返されます。

ターゲット・スレッドが既に終了しているが、まだ切り離されていない場合、サブルーチンは即時に戻ります。 まだ終了していなくても、切り離されたスレッドを結合することはできません。 結合されたすべてのスレッドがウェイクアップされると、ターゲット・スレッドは自動的に切り離されます。

このサブルーチン自体が原因でスレッドが終了することはありません。 これは、 pthread_cond_wait サブルーチンのような働きをして、特別な条件を待ちます。

注: pthread.h ヘッダー・ファイルは、スレッド・ライブラリーを使用する各ソース・ファイルの最初の組み込みファイルでなければなりません。 それ以外の場合は、 -D_THREAD_SAFE コンパイル・フラグを使用するか、cc_r コンパイラーを使用する必要があります。 この場合、フラグは自動的に設定されます。

pthread_detach サブルーチンは、スレッド ID がロケーション thread にあるスレッドのストレージを、そのスレッドの終了時に再利用できることをインプリメンテーションに指示するために使用されます。 このストレージは、スレッドが切り離されたかどうかに関係なく、プロセス出口で再利用され、 thread 戻り値用のストレージを含むことができます。 thread がまだ終了していない場合、 pthread_detach はそれを終了させません。 同じターゲット・スレッドで複数の pthread_detach 呼び出しを行うと、エラーが発生します。

パラメーター

項目 説明
thread ターゲット・スレッドを指定します。
status ターゲット・スレッドの終了状況が保管される場所を指します。 値が NULLの場合、終了状況は戻されません。

戻り値

正常に実行された場合、 pthread_join 関数はゼロを戻します。 正常に実行されなかった場合、エラーを示すエラー番号を戻します。

エラー・コード

pthread_join および pthread_detach 関数は、以下の場合に失敗します。

項目 説明
EINVAL インプリメンテーションが、スレッドによって指定された値が結合可能スレッドを参照していないことを検出しました。
ESRCH 与えられたスレッド ID が指定したスレッドに対応するスレッドが見つかりません。

pthread_join 関数は、以下の場合に失敗します。

項目 説明
EDEADLK スレッドの値は、呼び出しスレッドを指定します。

pthread_join 関数は、エラー・コード EINTRを戻しません。