假设我有一个多生产者和一个消费者场景。生产者的伪代码是:
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中实现此方案,但我看不到任何变化。
wait(full)
可以通知消费者有消费的东西。如果不首先发布wait(full)
,则消费者可以在生产者生产任何东西之前进行消费。 如果使用Java测试,请先在生产者之前启动使用者,然后让生产者稍等一会儿再生产第一个项目,以使使用者“消费”。