我正在UBUNTU平台上工作,我从两个不同的摄像头(基于事件的捕获)接收图像(通过UDP
)并处理图像(3D重建)。我想以这样的方式执行此操作:在图像接收操作正在进行时,图像处理操作应该并行开始。我知道我可以使用两个posix线程进行这两个并行操作。但我很困惑如何同步这两个线程,以便process()
线程应该在receive()
线程接收到至少一对图像之后准确开始。如果我使process()
线程等待mutex
条件(每次它将收到一对图像时由receive()
线程设置),接收将比处理和receive()
线程可以在process()
线程处理单个图像对时多次设置条件。有什么可能是实现这一操作的更好方法?
答案 0 :(得分:2)
在接收线程中的线程安全队列上处理您的图像(或指向每个图像的指针,或关于信息的结构,无论您的机制是什么)。在将项目排队后,使用semaphore或pthread_cond来表示处理线程。
处理线程应该阻塞,直到它收到cond信号,并且只应在队列为空时阻塞。当该线程被解除阻塞时,它应该从队列中弹出一个图像并开始工作。当它完成处理时,它应该(在循环的顶部)决定是阻止还是处理另一个图像。如果队列为空,则阻塞。如果队列不为空,则会弹出一个图像并对其进行处理。