我正在尝试为我的程序实现循环缓冲区。缓冲区用于在两个线程之间共享数据,如下所示。我使用OpenCV从相机中获取视频帧(线程1)。然后我想将这些数据存储在循环缓冲区中,以便线程2可以从缓冲区获取数据。
如何在c ++中为cv :: Mat对象实现循环缓冲区?我知道如何为标准c ++对象(如整数或char)创建循环缓冲区,但我无法使用cv :: Mat类型的对象。有什么建议吗?
答案 0 :(得分:4)
答案 1 :(得分:3)
只是向下一个要写入的插槽的矢量和索引以及要处理的下一个插槽有什么问题?
当你走到尽头时,所有你需要处理的是环绕,如果你在矢量大小中使用2的幂,你可以使用一个简单的掩码。
答案 2 :(得分:1)
当只有写入线程更新end
指针并且只有读取线程更新start
指针时,循环缓冲区是线程安全的,并且对这些指针的访问是原子的。您在cbWrite
中有一个更新start
的地点,这将导致竞争条件。