pthread_createは、スレッドを生成するライブラリ関数・・・。
重たい処理をさせたい時に、メインのスレッドとは別に、ワーカースレッドを作って、そこで処理させることで、メインスレッドの処理とワーカースレッドの処理を並行して円滑に進められる・・・。
pthreadについて(概要・生成) (1/4):CodeZine(コードジン)
POSIXスレッドを使うので、
pthread.hが必要・・・。
今回、5つスレッドを生成するので、
pthread_t型の配列thread(要素数5)を宣言・・・。
これらに各スレッドを表す識別子が入る・・・。
for文で1つずつpthread_createを呼んでスレッドを生成・・・。
第1引数にthread[i]のアドレス・・・。
第2引数にスレッド属性を表すpthread_attr_t型変数が入るがここでは属性を設定しないのでNULLでいい・・・。
第3引数にワーカースレッドで実行させたい関数のアドレス・・・。
第4引数に第3引数の関数に渡すパラメータを構造体変数にまとめて、(void *)なアドレスにして指定する・・・。今回はNULL・・・。
pthread_joinは、指定のスレッド識別子のスレッドが終わるまで待つ・・・。
for文でそれを繰り返してるので、全てのスレッドが終わるまで、for文を抜けられない・・・。
第3引数に渡したstart_routineは、
1秒ごとに1から5まで出力・・・。
$ ./pthread_create i = 1 i = 1 i = 1 i = 1 i = 1 i = 2 i = 2 i = 2 i = 2 i = 2 i = 3 i = 3 i = 3 i = 3 i = 3 i = 4 i = 4 i = 4 i = 4 i = 4 i = 5 i = 5 i = 5 i = 5 i = 5 $
5つのスレッドが同時並行で1秒ごとに1, 2, 3, 4, 5を出力している・・・。
Sample/pthread_create.c at master · bg1bgst333/Sample · GitHub