c++ - C++: 将 5个消费者同步到 1 producer ( 多线程)

  显示原文与译文双语对照的内容
0 0

我有五个消费者和一个制片人。 五个消费者分别输出不同的数据,从一个生产者到 ~10ms. 在这些 10ms 期间,生产者为下一个输出准备参数。 设置输出参数时,我想设置一个标志,指示用户开始下一个输出。 我只希望生产者在消费者输出数据时产生。

我不确定如何同步五个消费者和单个生产者。 我目前有两个标志,runFlag和 doneFlag 。 当使用者读取新数据时,我想将runFlag设置为 true 以便计算,我想将doneFlag设置为 false,因为计算未完成。 但是,如果在一个消费者中将doneFlag设置为 false,那么在消费者可以以检查标志之前,它可以能。

我希望我的问题是特定的。 请告诉我还有什么可以提供给我的。 还有,我只是想了解一下如何继续。 我知道有多种方法可以做到这一点,但是我不确定哪种方法能达到最好的效果。

谢谢!

时间:原作者:3个回答

0 0

你将需要 2个事件和一个整数引用计数。

当制片人制作了一些东西的时候:

  • 启动 read_count = 0 ;
  • 设置事件 readme
  • 开始等待事件完成;

用户等待事件 readme 。 完成工作后,它们会自动递增 read_count 。 如果read_count达到消费者的数量,则为 5,然后它设置 completed 事件。 因此生产者可以继续,循环不断重复。

原作者:
0 0

几年前,我必须创建一个通用的工作调度程序,它可以处理。 它不是生产者消费者,可能对你的应用程序来说是多余的,但它可能给你一些想法。

我特别喜欢使用内存共享队列。出站队列和入站队列( 像双向通道一样) 。 如果创建的队列类具有适合读写的同步,生产者和使用者可以以独立使用。 他们不需要知道如何与彼此同步。

生产者和使用者知道的数据在工作项类中引用。 工作项类包含所有状态标志。 数据也应该是线程安全的。

生产者将工作项放入出站队列,并且每个用户自动取出一个工作项。 完成工作后,将更新状态标志,并将工作项发送回入站队列,以便由生成器进行处理。

IIRC,架构只包含三个类。

原作者:
...