关于计算机操作系统 生产者和消费者问题 哪位来解答一下

2025-04-28 05:16:03
推荐回答(1个)
回答1:

wait(x)是把x这个信号量进入临界区,
signal(y)是把y这个信号量离开临界区。

此题中,wait顺序不可变,signal可变。

进入临界区的话,其他线程再申请进入同一个信号量的临界区就会block,等待。。

1)wait顺序不可逆原因:
对于消费者,这里先wait(full)是为了确保full不是0(即确保可以消费),不然先wait(mutex)的话,如果full为0,就会一直停在这里,等待消费。然后生产者就一直在等待进入mutex而无法进行生产,导致死锁。
对于生产者也是如此。

2)signal可逆原因:
对生产者,因为已经生产完了,所以先退出mutex临界区或者或者对full的数目加一,都不会产生影响。
设full=0,此时消费者无法进入full临界区,如果先signal(full),那么full数目加1,消费者可以进入full临界区,但是metux还被生产者使用,所以消费之要等到生产者signal(mutex)才能进入,没有任何影响。
对于消费者也是如此。