0

我正在 UBUNTU 平台上工作,在该平台上,我UDP从两个不同的相机(基于事件的捕获)接收图像(通过)并处理图像(3D 重建)。我想以这样一种方式执行此操作,即在图像接收操作正在进行时,图像处理操作应该并行启动。我知道我可以为这两个并行操作使用两个 posix 线程。但是我很困惑如何同步这两个线程,以便process()线程应该在线程接收到至少一对图像之后准确启动receive()。如果我让process()线程等待一个mutex条件(每次接收到一对图像时都会由receive()线程设置),接收将比处理快得多,并且receive()当线程正在处理单个图像对时,线程可能会多次设置条件process()。实现此操作的更好方法是什么?

4

1 回答 1

2

将要处理的图像(或指向每个图像的指针,或有关信息的结构,无论您的机制是什么)放在接收线程中的线程安全队列中。将项目排入队列后,使用信号量pthread_cond向处理线程发出信号。

处理线程应该阻塞直到它接收到 cond 信号并且应该只在队列为空时阻塞。当这个线程被解除阻塞时,它应该从队列中弹出一个图像并开始它的工作。当它完成处理时,它应该(在循环的顶部)决定是阻止还是处理另一个图像。如果队列为空,则阻塞。如果队列不为空,它会弹出一个图像并处理它。

于 2012-05-02T12:12:11.997 回答