インテル・スレッディング・ビルディング・ブロックなら、同期化オブジェクトもマルチコア対応です。
売りのparallel_whileとパイプラインはどうでしょうか。
日本語のドキュメントはハナモゲラに見えます。
たぶんこの本を立ち読みするのが良いと思います。

マルチコアのためのIntelスレッディング・ビルディング・ブロック入門―マルチコアCPUの能力を引き出すプログラミング技法
- 作者: 日向俊二
- 出版社/メーカー: カットシステム
- 発売日: 2008/03
- メディア: 単行本
- 購入: 2人 クリック: 74回
- この商品を含むブログ (9件) を見る
あとは、デザパタにもパイプラインパターンとかあるようですので、そちらもどうぞ。
さて。
キュー長のデフォルトが無制限、という点で、こりゃ仕事で使ったらヒドイ目にあうんじゃないかという第一印象です。キューが無限に伸びることを許す環境なんてないですか
らね。
日本語ドキュメント曰く
デフォルトでは、concurrent_queue<T> は無制限です。メモリーがなくなるまで、任意の数の値を保持します。set_capacity メソッドでキューのキャパシティーを設定して制限することができます。キャパシティーを設定すると、キューに空間ができるまでプッシュはブロックされます。制限のあるキューは無制限のキューよりも遅いため、キューが大きくなりすぎることを防ぐコードがプログラム中にある場合は、キャパシティーを設定しないほうが良いでしょう。
「無制限を許可して、大きくなり過ぎることを防ぐコード」という文字通りの机上の空論がマニュアルに書いてあるのがなんとも痛ましいです。
キューなんてものを使ってしまったが最後「常に安定して動作させる」ことが本質的に困難であるのですから、最初からキューなんか用意しなきゃいいのに、と思います。
『この程度の用途なら不完全なキューでも問題ないだろう』などという安易な実装が、大災害を招くということをインテルさんなら分かっていると思うんですがねぇ。
使いもせずに、グダグダ文句を言っても始まりません。
オープンソース版もあるので、気になる方は試してみたらいかがでしょうか。
コメント