マルチスレッドのプログラミング

スレッド終了処理の完了

スレッドの終了には下記の方法があります。

デフォルトでは、ほかのスレッドが当該スレッドに対して「終了待ち」を行い、その消滅を確認するまでの間、スレッドは残存します。これはデフォルトの pthread_create() 生成属性の「切り離されていない」と同じです。詳細は、pthread_detach のマニュアルページを参照してください。「終了待ち」操作が行われると当該スレッドの終了状態が取得され、その後、当該スレッドが消滅します。

特に注意すべき特別な場合があります。メインスレッド (すなわち、main() を呼んでいるもの) が main() 呼び出しから戻るか、exit() を呼び出す場合です。この操作が行われるとプロセス全体が終了し、プロセス内のスレッドもすべて終了してしまいます。このため、メインスレッドが main() から処理途中で終了することがないよう十分注意しなければなりません。

メインスレッドが単に pthread_exit を呼び出した場合は、メインスレッドが終了するだけです。プロセス内のその他のスレッドとプロセスは、その後も存続します。すべてのスレッドが終了するとプロセスは終了します。