5

プログラムに循環バッファを実装しようとしています。バッファは、以下に示すように、2つのスレッド間でデータを共有するために使用されます。OpenCVを使用して、カメラからビデオフレームを取得します(スレッド1)。次に、このデータを循環バッファーに格納して、スレッド2がバッファーからデータを取得できるようにします。

ここに画像の説明を入力してください

cv::MatC ++でオブジェクトの循環バッファを実装するにはどうすればよいですか?int標準のC++オブジェクト(またはなど)の循環バッファを作成する方法は知ってcharいますが、タイプがのオブジェクトで動作させることはできませんcv::Mat

助言がありますか?

4

3 に答える 3

5

解決 しました。循環バッファのスレッドセーフな実装を参照してください。

于 2012-02-29T15:18:02.070 に答える
3

書き込み先の次のスロットと処理する次のスロットへのベクトルとインデックスだけで何が問題になりますか?

処理する必要があるのは、最後に到達したときのラップアラウンドだけです。ベクトルサイズで2の累乗を使用する場合は、そのための単純なマスクを使用できます。

于 2012-02-27T22:54:20.693 に答える
1

循環バッファーは、書き込みスレッドのみがendポインターを更新し、読み取りスレッドのみがポインターを更新し、startそれらのポインターへのアクセスがアトミックである場合、スレッドセーフです。cbWriteその更新startには、競合状態につながるスポットがあります。

于 2012-02-27T23:06:15.353 に答える