【问题标题】:Multithreading: several producers + one consumer多线程:多个生产者+一个消费者
【发布时间】:2013-11-22 16:30:02
【问题描述】:

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

【问题讨论】:

    标签: multithreading qt synchronization


    【解决方案1】:

    消费者循环:

    • 等待n
    • 收集数据
    • 做它的事
    • 向所有n 生产者发送信号

    生产者循环(n 并行):

    • 做它的事
    • 提供数据
    • 给消费者的信号
    • 等一下

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

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

    消费者循环:

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

    生产者循环(n 并行):

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

    【讨论】:

    • “等待 n 次”是什么意思?我必须锁定 n 个互斥锁吗?如果我理解正确,生产者必须等待所有数据都将被处理,然后再生成新数据。我认为这不是最好的解决方案。
    • 抱歉,我想您只有在所有人都完成后才想继续制作人。我的意思是在循环中锁定相同的互斥锁n 次。如果您可以缓冲结果,则可以通过另一种方式提高效率。
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多