読者です 読者をやめる 読者になる 読者になる

pthread_attr_setdetachstate

pthread_attr_setdetachstateは、スレッド属性のうち、デタッチ状態に関する設定をするライブラリ関数・・・。

Man page of PTHREAD_ATTR_SETDETACHSTATE

前回は、合流可能なスレッドとしてスレッド作成したが、今回はこれを使ってデタッチするような設定にする・・・。

pthread_joinを使って合流できなくなるので、だとすれば戻り値は取れないわけだから、もうNULLにしてしまう・・・。

PTHREAD_CREATE_DETACHEDを設定すると、スレッドはデタッチされる・・・。
そうすると、合流可能できなくなるわけだから、スレッドが終わるのを待つなら、sleepで待つとかでもできるが、

実は、デタッチスレッドの開始後に、スレッドの外側でpthread_exit(NULL)を呼ぶと、デタッチスレッドが全て終了するまで処理を待ってくれるという裏ワザみたいな機能がある・・・。

$ ./pthread_attr_setdetachstate
i = 1, no = 3, message = No.3
i = 1, no = 4, message = No.4
i = 1, no = 2, message = No.2
i = 1, no = 1, message = No.1
i = 1, no = 0, message = No.0
i = 2, no = 4, message = No.4
i = 2, no = 3, message = No.3
i = 2, no = 2, message = No.2
i = 2, no = 1, message = No.1
i = 2, no = 0, message = No.0
i = 3, no = 3, message = No.3
i = 3, no = 4, message = No.4
i = 3, no = 2, message = No.2
i = 3, no = 1, message = No.1
i = 3, no = 0, message = No.0
i = 4, no = 4, message = No.4
i = 4, no = 3, message = No.3
i = 4, no = 2, message = No.2
i = 4, no = 1, message = No.1
i = 4, no = 0, message = No.0
i = 5, no = 3, message = No.3
i = 5, no = 4, message = No.4
i = 5, no = 2, message = No.2
i = 5, no = 1, message = No.1
i = 5, no = 0, message = No.0
$

というわけで、スレッドをデタッチしても、メインスレッドがワーカースレッドの終了を待ってくれる方法はある・・・。

Sample/pthread_attr_setdetachstate.c at master · bg1bgst333/Sample · GitHub