Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all
名前
pthread_exit - 呼び出したスレッドを終了する
書式
#include <pthread.h> void pthread_exit(void *retval); -pthread でコンパイルしてリンクする。
説明
pthread_exit() 関数は、呼び出したスレッドを終了し、 retval 経由で値を返す。 この値は (その スレッドが join 可能な場合に) pthread_join(3) を 呼び出した同じプロセス内の別のスレッドが 参照できる値と同じである。 pthread_cleanup_push(3) で設定されたクリーンアップハンドラーのうち、 まだ pop (取り出され ていない) ハンドラーを (push されたのと逆の順序で) 取り出して実行する。そのスレッドがス レッド固有のデータを持っている 場合は、クリーンアップハンドラーが実行された後に、スレッド 固有のデータ に対応するデストラクタ (destructor) 関数が呼び出される (呼び出し順序 は規定さ れていない)。 スレッドが終了する際に、プロセスの共有リソース (例えば、mutex、状態変数 (condition variables)、セマフォ、ファイルディスクリプター)が解放される。 atexit(3) を使って登録された 関数は呼び出されない。 プロセスの最後のスレッドが終了すると、そのプロセスは、終了ステータス 0 で exit(3) を呼び出 した場合と全く同じように終了する。したがって、 プロセスの共有リソースは解放され、atexit(3) を使って登録された関数 が呼び出される。
返り値
この関数は呼び出し側には返らない。
エラー
この関数は常に成功する。
属性
マルチスレッディング (pthreads(7) 参照) pthread_exit() 関数はスレッドセーフである。
準拠
POSIX.1-2001.
注意
メインスレッド以外のスレッドの開始関数 (start function) がreturn を 行うと、暗黙のうちに pthread_exit() が呼び出され、 関数の返り値がスレッドの終了ステータスとして使用される。 他のスレッドが実行を継続できるように、メインスレッドは exit(3) では なく pthread_exit() を 呼び出して終了すべきである。 retval が指す値は、呼び出したスレッドのスタックに置くべきではない。 呼び出したスレッドが終 了した後は、そのスタックの内容が不定となるから である。
バグ
現在のところ、停止 (stop) されたスレッドグループを、すでに終了した (dead) スレッドグループ リーダーで wait(2) する場合の、 カーネル実装の論理には制限がある。 この制限は、すでにス レッドグループリーダーが pthread_exit() を 呼び出しているようなフォアグラウンドプロセスに ストップシグナルが送信 された場合に、端末がロックされてしまう、といった問題として表に見え る 場合がある。
関連項目
pthread_create(3), pthread_join(3), pthreads(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。