pthread_attr_initは、スレッド属性を初期化するライブラリ関数・・・。
スレッドには、さまざまな属性を付加することができる・・・。
今回は、スレッド属性の初期化をpthread_attr_initで行ったら、pthread_attr_setdetachstateを使って生成したスレッドがデタッチせず合流可能とするような設定にする・・・。
合流可能なスレッドは、最終的にスレッドが終わったら、pthread_joinでメインスレッドと同期(つまり合流)しないといけない・・・。
一方、デタッチしたら、ワーカースレッドのリソースを即座に解放できるが、pthread_joinで同期することはできない・・・。
属性を持つpthread_attr_t型配列attr[5]を初期化したら、pthread_attr_setdetachstateでPTHREAD_CREATE_JOINABLEをセットすることで合流可能とする・・・。
pthread_joinでスレッドが合流したら、pthread_attr_destroyで属性を破棄する・・・。
$ ./pthread_attr_init 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 return_code[0] = 0 return_code[1] = 1 return_code[2] = 2 return_code[3] = 3 return_code[4] = 4 $
まあ、属性を設定しないもともとの状態が合流可能状態なので、特に変化はない・・・。
Sample/pthread_attr_init.c at master · bg1bgst333/Sample · GitHub