gpt4 book ai didi

multithreading - 快生产者和慢消费者

转载 作者:行者123 更新时间:2023-12-04 04:33:58 25 4
gpt4 key购买 nike

我有一个用例,快速生产者在队列中插入数据,而慢速消费者消耗数据。我面临的问题是队列大小随着时间的推移不断增加。我有一个类实现,其中 std::queue 受互斥锁和条件变量保护,用于并发读取和写入。

这如何适应生产者在达到 MAX_THRESHOLD 直到停止将数据插入队列并且消费者已经消耗了一些数据信号生产者将数据插入队列的情况。

有人可以提供示例实现吗?

同样在不改变类实现的情况下,是否可以通过在生产者和消费者中添加另一层同步来解决这个问题?

最佳答案

任何一个:

a) 如果队列大小达到 MAX_THRESHOLD,则使用有界队列类阻止生产者。这意味着更改您可能不想要的队列类。

b) 使用“池队列”——另一个无界阻塞队列,在启动时用 MAX_THRESHOLD 对象填满。生产者从池中获取它的对象,加载它们,排队到生产者。生产者从消费者那里获取对象,“消费”它们并将它们返回到池中。这有点要求使用您可能不想要的指针或引用。

c) 使用一个用 MAX_THRESHOLD 计数初始化的信号量,以类似于 (b) 的方式表示消息 token - 生产者必须在排队之前获得一个单元,消费者在完成消息对象后发布一个单元。

我倾向于使用(b)。

关于multithreading - 快生产者和慢消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com