gpt4 book ai didi

java - 生产者/消费者 : no producer/consumer should block other producer/consumer

转载 作者:搜寻专家 更新时间:2023-11-01 03:03:39 30 4
gpt4 key购买 nike

我正在设计一个系统,其中将有 n 个生产者和 m 个消费者,其中 n 和 m 是数字,n != m。

我想这样设计系统,

  1. 任何生产者在生产时不得阻止其他生产者
  2. 任何消费者都不应在消费时阻止其他消费者
  3. 生产者和消费者在生产/消费时互相阻塞

例如:在 java 中,如果我使用同步关键字,那么它将阻塞相应的调用者。

我不确定我应该使用什么数据结构和算法来实现这个系统。

有人可以为此提供帮助/指示吗?

最佳答案

你可能想要类似 ConcurrentLinkedQueue 的东西.这个想法是您创建一个队列。您的 n 个生产者中的每一个都将工作项添加到队列中,并且 m 个消费者中的每一个都从队列中读取工作项。生产者只是:

while not done
create work item
add work item to queue

消费者就这么简单:

while not done
get next work item from queue
process work item

ConcurrentLinkedQueue 方法处理添加和删除项目,根据需要与其他生产者和消费者同步。

唯一真正的缺点是您必须轮询队列以查看是否有项目。因此,您可能需要一个自动重置事件,只要有项目添加到队列中,该事件就会触发。例如:

add work item to queue
set ItemAvailable event

消费者将轮询队列,如果没有可用的项目,则等待事件:

while not done
while ((item = queue.poll) == null)
wait on ItemAvailable event
process item

看看我链接的例子。它确实不难使用。

关于java - 生产者/消费者 : no producer/consumer should block other producer/consumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967736/

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