名称
pthread_exit() ― 呼び出し元スレッドの終了
構文
#include <pthread.h>
void pthread_exit(
void *value_ptr
);
パラメータ
| value_ptr | | 呼び出し元スレッドの終了ステータス。 |
説明
pthread_exit() は、呼び出したスレッドを終了させます。
呼び出し元スレッドは、終了ステータスとして value_ptr 内の値を返します。 この値は、終了スレッドに対して pthread_join() 呼び出しを行った結合スレッドに返されます。 detachstate 属性を PTHREAD_CREATE_JOINABLE にして作成されたスレッドだけが、終了ステータスを pthread_join() に返すことができます。
デタッチされたスレッドの終了ステータスは、スレッドが終了するときに失われます。
スレッドが終了しても、プロセス共有リソースは解放されません。
プロセス共有リソースには、mutex、条件変数、セマフォ、メッセージ待ち行列記述子、ファイル記述子などがあります。
プロセスの終了と同様の手順でスレッドが終了しても、 atexit() ルーチンは呼び出されません。
スレッドがその開始ルーチンから戻ると、 pthread_exit() への暗黙の呼び出しが行われます。
関数の終了ステータスは、スレッドの終了ステータスとして使用されます pthread_create(3T) を参照)。 pthread_exit() を呼び出さずに main() から戻ると、メインスレッドは main() の戻り値を終了ステータスにしてプロセスを終了させます。 メインスレッドで pthread_exit() を呼び出すと、
最後のスレッドが終了するか、スレッドが exit() を呼び出すまで、プロセスは実行を継続します。
プロセスの最後のスレッドが終了すると、プロセスは終了ステータスをゼロにして終了します。
登録されたすべての取り消しクリーンアップハンドラーが取り出され、登録とは逆順に実行されます。
取り消しクリーンアップハンドラーの実行が完了すると、デストラクタ関数に結び付けられたスレッド固有データ値が NULL でない場合は、対応するデストラクタ関数が呼び出されます。
デストラクタ関数が呼び出される順序は、規定されていません。
スレッドを終了させるために、取り消しクリーンアップハンドラーまたはデストラクタ関数から pthread_exit() を呼び出すと、結果は不定になります。
スレッドが終了した後で、スレッドのローカル (自動) 変数をアクセスすると、結果は不定になります。
終了するスレッドは、 value_ptr パラメータでローカル変数を指定してはいけません。
著者
pthread_exit() は、IEEE POSIX P1003.1c 標準から派生しました。
標準準拠
pthread_exit(): POSIX 1003.1c.