pthread_create

pthread_createは、スレッドを生成するライブラリ関数・・・。

Man page of 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