Provided by: manpages-ja-dev_0.5.0.0.20210215+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)
       を使って登録された関数 が呼び出される。

返り値

       この関数は呼び出し側には返らない。

エラー

       この関数は常に成功する。

属性

   マルチスレッディング (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/ に書かれている。