C++ スレッド処理で複数スレッド連携
C++ の Thread と Queue を使って、複数のスレッドを連携させて動作させるサンプルを作ってみた。
処理概要
Thread A
0 ~ count - 1 (デフォルト 10) までの番号を順次 Queue A に渡す。
Thread B
Queue A のデータをため込んで、一定量 (デフォルト 3) ごと足しこんで Queue B に渡す。
Thread C
Queue B のデータをため込んで、一定量 (デフォルト 2) ごとかけて表示。
実行結果
- ビルドコマンド
$ mkdir build $ cd build $ cmake .. $ make
- 実行 (a count = 10, b max = 3, c max = 2)
$ ./test Thread A Start Thread C Start Thread B Start Thread A : 0 Thread A : 1 Thread A : 2 Thread B : 0 + 1 + 2 => 3 Thread A : 3 Thread B : 1 + 2 + 3 => 6 Thread A : 4 Thread C : 3 x 6 => 18 Thread B : 2 + 3 + 4 => 9 Thread A : 5 Thread C : 6 x 9 => 54 Thread B : 3 + 4 + 5 => 12 Thread A : 6 Thread C : 9 x 12 => 108 Thread B : 4 + 5 + 6 => 15 Thread A : 7 Thread C : 12 x 15 => 180 Thread B : 5 + 6 + 7 => 18 Thread A : 8 Thread C : 15 x 18 => 270 Thread B : 6 + 7 + 8 => 21 Thread A : 9 Thread A End Thread B : 7 + 8 + 9 => 24 Thread C : 18 x 21 => 378 Thread B End Thread C : 21 x 24 => 504 Thread C End OK