在生产者一消费者问题中,如果将两个semWait操作即生产者程序流程中的semWait(buffers)和semWait(mutex)互换位置,或者是将semSignal(mutex)与semSignaj(products)互换位置,结果会如何?

admin2016-05-14  29

问题 在生产者一消费者问题中,如果将两个semWait操作即生产者程序流程中的semWait(buffers)和semWait(mutex)互换位置,或者是将semSignal(mutex)与semSignaj(products)互换位置,结果会如何?

选项

答案seinWait(buffers)和semWait(mutex)互换位置后,因为mutex在这儿是生产者和消费者公用的信号量变量,生产者在执行完semWait(mutex)后,则mutex赋值为0,倘若当前无空闲缓冲区,buffers也为0,在执行了semWait(buffers)后,buffers为-1,该生产者进程就会进入阻塞状态,这样不仅其他的生产者进程会因mutex不能继续存放产品,并且消费者也因mutex不能取产品,从而释放缓冲区,使缓冲区始终为0,这样就形成了死锁。 由于semSignal操作不含有使进程阻塞的操作,故semSignal(mutex)与semSignal(products)互换位置后,不会发生死锁问题。 交换消费程序流程中的semWait(products)和sereWait(mutex)或者semSignal(mutex)与semSignal(products)的位置的结果也类似。

解析
转载请注明原文地址:https://kaotiyun.com/show/AzAx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)