start_routine

ワーカースレッドで実行する処理は、start_routine(名前変更可)に記述する・・・。
このワーカースレッドに、メインスレッドからパラメータを渡すことも可能である・・・。

パラメータは、

このように構造体にまとめる・・・。
ここでは、THREAD_ARG構造体を定義し、noはスレッドを見分けるための番号、messageはそのスレッド独自のメッセージとして要素を定義している・・・。

スレッドの数だけ、THREAD_ARG型thread_argも配列で用意する・・・。

各thread_argにパラメータをセットし、pthread_createの第4引数にセット・・・。

一方、start_routine側は、

(void *)の引数argとして渡されるので、THREAD_ARG構造体のポインタにして復元・・・。

あとはパラメータを1秒ごとに出力、これを5回繰り返して終了・・・。

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

noは、pthread_createを実行した順番に付けた番号だが、3が最初に実行されていることが分かる・・・。
これは、同時に実行したスレッドの、どのスレッドがどういう順番で実行されるかは、こちら側(ユーザ側)では決められないということを示している・・・。

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