C++ で Producer-Consumer パターン

Producer-Consumer とはデータを生産する Producer スレッドとデータを消費する Consumer スレッドがキューを介してデータをやり取りするパターンです。

以下の例では、Producer 側からキューに追加された文字列を Consumer スレッドで取り出して標準出力に出力しています。

Producer スレッドはキューにデータを積む際に Consumer スレッドを起床させ、Consumer スレッドはキューが空になるとブロックされ sleep 状態に入ります。この動作は Garded Suspension パターンそのもので、Producer-Consumer パターンは下位レベルで Garded Suspension パターンを利用していると言えます。 (実際以下の例も Garded Suspension パターンで挙げた例と殆ど同じ内容ですが、スレッドが複数になっている点が異なります)

実際に使用すると以下のようになります。

今回は Producer 側はメインスレッド1つのみですが、当然 Producer 側が複数スレッドになるパターンもあり得ます。

ちなみに上記の例でもスレッドをお行儀良く終了させるために  Two-Phase Termination パターン を併用しています。

C++ でマルチスレッドデザインパターン

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中