キュースレッドを安全にするにはどうすればよいですか?プッシュ/ポップ/フロント/バックしてクリアする必要があります。ブーストに似たようなものはありますか?
私には1人のプロデューサーと1人以上のコンシューマーがいます。
std::queue
へのアクセスを保護する必要があります。ブーストを使用している場合は、boost::mutex
を使用して保護してください。ここで、複数のリーダーと1つのライタースレッドがある場合は、boost::shared_lock
(リーダー用)とboost::unique_lock
(ライター用)を確認してください。
ただし、ライタースレッドの枯渇に遭遇した場合は、boost::shared_mutex
を参照してください。
_std::queue
_は、1つ以上のスレッドが書き込みを行っている場合、スレッドセーフではありません。また、そのインターフェースは、外部で同期する必要があるpop()
、size()
、empty()
などの個別のメソッドを持っているため、スレッドセーフな実装には役立ちません。
一般的なアプローチ* よりシンプルなインターフェイスでキュータイプを実装し、内部でロックメカニズムを使用して同期を提供することです。
*「並行キューC++」を検索すると、多くの結果が得られるはずです。私は非常に単純なおもちゃを実装しました ここ 、制限は標準のC++のみを使用することでした。 Anthony Williamsの本C++の同時実行、および彼のブログも参照してください。
boost 1.53には、ロックフィーキューがあります http://www.boost.org/doc/libs/1_53_0/doc/html/boost/lockfree/queue.html 、このようなミューテックスやsmthはありません。
あなたはそれを保護しなければなりません、例えばとともに std::mutex
、on every操作。 C++ 11をまだお持ちでない場合は、Boostが代替手段になります。