pthread_detachについて

POSIXスレッドライブラリのdetachの説明が入門用資料を見ていてもなかなか見つからず, ようやく見つかったのでメモ.

スレッドが終了したら,別のスレッドでその終了したスレッドのリソースを開放しなければならない. だが,プログラムによっては,このリソース開放処理を記述する適切な箇所が見当たらなかったり,プログラム構造に制約を課してしまう場合がある. このような場合には,該当スレッドにてpthread_createする際の属性にてデタッチ属性を指定するか(※), include <pthread.h> int pthread_detach(pthread_t th); を呼び出す. 返り値は0なら成功,0以外ならエラーコードが設定されている. 引数にはやはり,デタッチ対象のスレッドの識別子を指定する. スレッドをデタッチすることによって,対象のスレッドは終了時にリソースが開放されることを保証される. ただし,合流可能状態でなくなり,pthread_joinできなくなる. デタッチされたスレッドに対しpthread_joinを実行すると,エラーが返される. また,pthread_joinにて合流待ちされているスレッドに対してpthread_detachを呼び出すと,何も処理されず0が返される.

通常はthreadの処理が終わるとリソースが保持されておりpthread_join時にリソース取得ができるが,
pthread_joinを呼ばない場合にはpthread_detachを呼んでおくとスレッド終了時にリソースが解放される.
もしくはpthread_createするときにdetach属性を付与しておく必要がある.
ということ.