Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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/ に書かれている。