生产者/消费者问题-更改信号量顺序

问题描述 投票:-1回答:1

假设我有一个多生产者和一个消费者场景。生产者的伪代码是:

product = produce()
wait(empty)
wait(mutex)
array[in] = product
in = (in + 1) % n
signal(mutex)
signal(full)

消费者的伪代码是:

wait(full)
product = array[out]
out = (out + 1) % n
signal(empty)
useProduct()

如果我在使用者中交换信号量,即在wait(full)之前signal(空)会发生什么?我试图在Java中实现此方案,但我看不到任何变化。

concurrency semaphore producer-consumer
1个回答
0
投票
wait(full)可以通知消费者有消费的东西。如果不首先发布wait(full),则消费者可以在生产者生产任何东西之前进行消费。

如果使用Java测试,请先在生产者之前启动使用者,然后让生产者稍等一会儿再生产第一个项目,以使使用者“消费”。

© www.soinside.com 2019 - 2024. All rights reserved.