1

私はゲームを持っていて、2つのスレッドがあります。1つはカスタムクラスを生成し、それを保存する必要があります(これをキューにプッシュしますが、それがスレッドセーフかどうかはわかりません。最初のスレッドは50ミリ秒ごとに新しいインスタンスを生成し、2番目はより高速に読み取ることができますあるか遅い場合-速度は時間とともに変化します)。別のスレッドは、キューが空でない場合に使用し、最初にポップしていくつかのことを計算します。stlまたはboostでこの問題に対して安全なデータ構造スレッドはありますか?

4

1 に答える 1

3

std::queueまたは同様のコンテナを使用すると、スレッドセーフになりません。std :: queueを使用しているときに、アクセス(プッシュ/ポップ)をスレッドセーフにしたい場合は、boost::mutexまたは同様のメカニズムを使用して、各アクセスの前にロックする必要があります。boost::shared_mutex複数のスレッドからの不変の読み取りが必要かどうかを確認できます(説明した内容に基づいて、それが必要かどうかはわかりません)。

それとは別に、boost::interprocess::message_queue誰かがすでに言及しているように、あなたは見ることができます->ブーストの最新バージョンについてはhttp://www.boost.org/doc/libs/1_50_0/boost/interprocess/ipc/message_queue.hpp

さらに、ロックフリーキューen.wikipedia.org/wiki/Non-blocking_algorithmの概念があります。そのような実装の例を提供することはできませんが、グーグルで検索すれば見つけることができると確信しています。

于 2012-07-27T07:41:45.560 に答える