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

时间:2013-11-22 07:32:06

标签: multithreading qt synchronization

我有以下问题 我有几个线程(生产者)计算移动对象的位置和一个打印计算结果的线程(消费者)。每个线程都有自己的时间范围。同步问题是消费者只有在所有生产者在印刷时计算位置时才能打印结果。换句话说,消费者必须将其当前时间与生产者的相同时间进行比较,并决定是否可以打印结果。我找到了一个类似的示例,其中使用信号量进行同步,但那里只有一个生产者。有谁知道一个聪明的解决方案?

1 个答案:

答案 0 :(得分:0)

消费者循环:

  • 等待n
  • 收集数据
  • 做它的事
  • 表示所有n生产者

生产者循环(n并行):

  • 做它的事
  • 提供数据
  • 向消费者发出信号
  • 等待

(对不起,对QT一无所知,所以只是一般算法)

编辑:如果生产者有缓冲而不是等待同步,那么你可以这样做:

消费者循环:

  • 等待,然后检查所有缓冲区;当任何缓冲区为空时重复
  • 收集数据;如果有任何缓冲区已满,请向该生产者发出信号
  • 做它的事

生产者循环(n并行):

  • 做它的事
  • 等待缓冲区已满
  • 队列数据
  • 向消费者发出信号