考虑以下使用信号量的生产者-消费者问题的过程:
以下哪一项是TRUE?
(A)生产者将能够将一个项目添加到缓冲区中,但是消费者永远不能消费它。
(B)消费者将从缓冲区中删除不超过一项。
(C)如果使用者在缓冲区为空时成功获取信号量s,则会发生死锁。
(D)对于无死锁操作,信号量n的起始值必须为1,而不是0。
答案: (C)
说明:最初,缓冲区中没有元素。
信号量s = 1和信号量n = 0 。
我们假设缓冲区为空时,最初的控制权交给了使用者。
semWait减小信号量’的值。现在,s = 0且semWait(n)减小了信号量’n’的值。
由于信号量’n’的值小于0,因此控件陷入了函数semWait()的while循环中,并出现了死锁。
因此,如果使用者在缓冲区为空时成功获取信号量s,则会发生死锁。
如果您在以上文章中发现任何错误,请在下面发表评论。
这个问题的测验