Multithreading 多线程:多个生产者+;一个消费者

Multithreading 多线程:多个生产者+;一个消费者,multithreading,qt,synchronization,Multithreading,Qt,Synchronization,我有以下问题 我有几个线程(生产者)计算移动对象的位置,还有一个线程(消费者)打印计算结果。每个线程都有自己的时间刻度。同步的问题是,只有当所有生产者在打印时计算位置时,消费者才能打印结果。换句话说,消费者必须将其当前时间与生产商的相同时间进行比较,并决定是否可以打印结果。我发现了一个类似的例子,其中使用信号量进行同步,但只有一个生产者。有人知道智能解决方案吗?消费者循环: 等待n次 收集数据 做自己的事 向所有n生产者发送信号 生产者循环(n并行): 做自己的事 提供数据 给消费者的信号

我有以下问题
我有几个线程(生产者)计算移动对象的位置,还有一个线程(消费者)打印计算结果。每个线程都有自己的时间刻度。同步的问题是,只有当所有生产者在打印时计算位置时,消费者才能打印结果。换句话说,消费者必须将其当前时间与生产商的相同时间进行比较,并决定是否可以打印结果。我发现了一个类似的例子,其中使用信号量进行同步,但只有一个生产者。有人知道智能解决方案吗?

消费者循环:

  • 等待
    n
  • 收集数据
  • 做自己的事
  • 向所有
    n
    生产者发送信号
生产者循环(
n
并行):

  • 做自己的事
  • 提供数据
  • 给消费者的信号
  • 等等
(对不起,我对QT一无所知,所以只知道一般算法)

编辑:如果制作人有缓冲区而不是等待同步,则可以执行以下操作:

消费者循环:

  • 等待,然后检查所有缓冲区;在任何缓冲区为空时重复此操作
  • 收集数据;如果任何缓冲区已满,则向该生产者发送信号
  • 做自己的事
生产者循环(
n
并行):

  • 做自己的事
  • 如果缓冲区已满,请等待
  • 队列数据
  • 给消费者的信号

你说“等待n次”是什么意思?我必须锁定n个互斥锁吗?如果我理解正确,在生成新数据之前,生产者必须等待所有数据的处理。我不认为这是最好的解决方案。对不起,我想你只想在所有人都完成了之后再继续制作。我的意思是在循环中锁定相同的互斥锁
n次。如果您可以缓冲结果,那么您可以通过另一种方式提高效率。