Provided by: manpages-ja-dev_0.5.0.0.20221215+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) を使って登録された関数が呼び出される。
返り値
この関数は呼び出し側には返らない。
エラー
この関数は常に成功する。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。 ┌─────────────────┬───────────────┬─────────┐ │インターフェース │ 属性 │ 値 │ ├─────────────────┼───────────────┼─────────┤ │pthread_exit() │ Thread safety │ MT-Safe │ └─────────────────┴───────────────┴─────────┘
準拠
POSIX.1-2001, POSIX.1-2008.
注意
メインスレッド以外のスレッドの開始関数 (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 プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。