雑食性雑感雑記

知識の整理場。ため込んだ知識をブログ記事として再構築します。

C++ スレッド処理で複数スレッド連携

C++ の Thread と Queue を使って、複数のスレッドを連携させて動作させるサンプルを作ってみた。

処理概要

Thread A

0 ~ count - 1 (デフォルト 10) までの番号を順次 Queue A に渡す。

Thread B

Queue A のデータをため込んで、一定量 (デフォルト 3) ごと足しこんで Queue B に渡す。

Thread C

Queue B のデータをため込んで、一定量 (デフォルト 2) ごとかけて表示。

ソースコード

git に上げたので、詳しくはそちらを。
cmake でビルドします。

実行結果

  • ビルドコマンド
$ 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