2012-03-28 8 views
1

安全でないことについてのドキュメントはあまり明確ではありませんconcurrent_queue::unsafe_size()です。TBB concurrent_queue、unsafe_sizeはどれくらい危険ですか?

言及tbb/internal/concurrent_queue.hファイル内のdoxygenにコメント:キューの

ゲットサイズ。キューが を変更された場合、結果が無効である可能性があり、同時に

私は何を知ることに興味を持って、それは過去のある時点で有効なサイズを返します、またはそれはゴミを返すことがありますか? (複数のスレッドが読み書きしている場合)

私は正確な値には興味がありませんが、それ以上は "負荷"の表示になります。コンシューマスレッドに問題が発生したときに、キューの容量が爆発的に増加するのを防ぎたい。私はconcurrent_bounded_queueを使用していますが、これは名前が示すように容量コントロールがありますが、ロックフリーのプロパティを失うことになります。

答えて

1

安全でないとマークされているので、実際にはガベージとして扱う必要があります。メモリが本当にプッシュとポップの違いに役立つので、実際に疑問な数字を返すかもしれないと思います。しかし、たとえそれが「安全」だったとしても、それは過去に有効だった数字だけを返すことになり、それは待ち時間のないプログラミングの喜びの1つです。 実際にカウントを推論する必要がある場合は、キューを保持するクラスに原子カウントを格納します。

自分のビルドではなく、tbbでタスキングプリミティブの1つを使用していない理由はありますか?

+0

ジョブを使用していない理由は、ジョブが非常に小さく(つまり、同期ソケットで送信)、常に同じである(入力パラメータのみが変更され、呼び出される関数ではない)ということです。このような状況では、このようなシナリオには不適切なタスクが多い可能性があります。それでも、我々はまだ仕事を完全に排除しているわけではなく、まださまざまな可能性を評価しています。キューはより良いスタートに見えました(編集:私たちの現在の "データフロー"により適したパイプラインを試してみるかもしれません)。 –

+0

(途中であなたの答えをありがとう) –

関連する問題