我知道已经回答了类似的问题,但我问这个问题是因为它们并没有完全给出我想知道的内容。这是关于线程之间的同步。我的项目的想法是我们从数据采集卡中获取数据,并在数据采集过程中绘制和分析数据。到目前为止,我只有一个线程上的数据采集类和另一个线程上的绘图类。数据采集类将数据存储在全局循环缓冲区中,绘图类从全局缓冲区复制数据并进行一些绘图处理(减少数据点等)。这就是我认为所谓的(单一)生产者-(单一)消费者问题。
现在,我想在另一个分析数据的线程上介绍另一个类。然后,我将有一个生产者和两个消费者。我想施加以下条件:
- 两个阅读器共享相同的数据集。即,每个生产的项目必须由两个阅读器使用,而不是仅由其中一个阅读器使用。
- 当缓冲区已满时,数据采集类将覆盖全局缓冲区。当读取器由于数据采集类覆盖缓冲区而丢失数据时,必须检测到这一点,理想情况下,将其保存在日志中(例如,读取器遗漏了哪些数据部分) )。
- 分析类的计算可能很密集。为此,我可能需要在分析类中使用更大的数据缓冲区。
我处理第一部分(单个生产者和单个消费者)的方式似乎并没有直接扩展到第二部分(单个生产者和两个消费者)的情况。我想知道我应该如何进行。我使用 C++ 和 Qt 进行线程处理,因为我使用 Qt 作为 GUI。但是,解决方案不一定必须使用 Qt。但是,如果可能,将不胜感激示例代码或伪代码。我在这里找到了与我的问题类似的线程)。建议使用 boost::interprocess。然而,由于我以前从未使用过 Boost 库,而且虽然我已经阅读了有关 boost::interprocess 的文档,但它看起来太复杂了,无法弄清楚我自己。
非常感谢!
大辅