2

私にはプロデューサーとコンシューマーがいます。プロデューサーは特定の共有メモリ領域に固定サイズのアイテムを書き込み、コンシューマーはそれらを取得します。

プロデューサーは、ランダムに、コンシューマーよりも著しく遅いまたは速い場合があります。

私たちが欲しいのはそれです

  1. プロデューサーがコンシューマーよりも高速に実行されている場合、循環バッファーがいっぱいになると、最も古いフレーム(もちろん、コンシューマーが消費しているフレーム以外)に書き込みを続けます。この点を強調します。プロデューサーとコンシューマーはで同期する必要があります。それらは無関係なプロセスであるため、ソリューション)。

  2. 代わりに、コンシューマーがプロデューサーよりも速い場合は、新しいフレームを待機し、そこにあるときにそれを消費する必要があります。

循環バッファーを使用したプロデューサー/コンシューマーの実装を見つけましたが、最初のリクエストを尊重しなかったものだけです(つまり、循環バッファーがいっぱいの場合、コンシューマーが終了するのを待ちますが、必要なのは最も古いフレームを上書きすることです)。

私は自分自身の(バグが発生しやすい)ソリューションをロールバックしたくないのですが、事前に缶詰にされ、テストされたソリューションを使用します。誰かが私に良いCの実装を教えてもらえますか?(C ++も問題ありません)。

どうもありがとう。

4

2 に答える 2

-1

C++ の標準テンプレート ライブラリ (STL)で提供されている両端キューを使用したいようです。 ただし、C ではなく C++ を使用します。プロデューサーとコンシューマーが異なるスレッドの場合、キュー構造を保護するためにミューテックスも必要になります。

于 2009-10-14T17:08:29.640 に答える