2016-03-26 22 views
1

TBB concurrent_bounded_queueブロッキングポップにタイムアウトがないことに気づきました。私たちは待ち時間を計った別の実装からTBBに移行しており、ここで同じ機能を探しています。C++ TBB concurrent_bounded_queue - ポップタイムアウト

いずれにしても、タイムドウェイトを使用すると便利なことがありますが、ご意見をいただければ幸いです。

おかげ

答えて

0

According to Arch Robinsonは、TBBの建築家は、タイムアウトが優先ことはありませんでした:

TBBの初期設計は、並列高速化のためのタスクベースのプログラミングのパラダイムをターゲットに。私は、parallel_for、parallel_reduceなどのような "古典的"な並列アルゴリズムと考えています。コンテナとmutexはそれを念頭に置いて設計されています。レースの状態を避けるために必要である。ブロッキングは短くなると予想され、そうでなければプログラムはスケーリングされない。したがって、タイムアウトは優先事項ではありませんでした。

old article TBBエンジニアの1人が時限付きミューテックスについて説明しています。おそらく直接そこにスケッチされた回避策を使用することはできませんが、ブロックtry_popをブロックしていないconcurrent_queueに基づいてブロック解除デキューを実装するのに役立ちます。

パフォーマンスは、TBBキューを使用している場所に近いとは思っていません。それはそれほど簡単ではありませんが(おそらく100+ LOC)、本当に必要な場合は実行できます。

P.S. Java BlockingQueueスタイルのブロッキング・ポーリング/オファー・タイムアウトは、おそらく高速パスで使用したくないものです。何度か、私はこのような方法で実装を始めました。何らかの時間が過ぎた後に(プロンプトが意図されていない)、プロデューサ/消費者の圧力だけでは不十分で、ブロックするのが効率的でない、何が起こったのかを調べ、自分のコードの一部を再考する。

関連する問題