[27][30][单选]有 n 个消费者进程 Q1、Q2、…、Qn,其伪码如下:
j = 0; while (true) P (mutex); //mutex 初值为 1 if (fullness == 0) { //fullness 初值为 0 V (mutex); //从 Buffer[j]取产品 j = (j + 1) mod k; //k 为缓冲区大小 V (emptiness); //emptiness 初值为 C,C > 0,整数 V (mutex); //消费产品; } 这些消费者进程在执行过程中,可能会出现下列哪一种现象
正常运行
可能死锁
出现活锁
产生饥饿
答案
可能死锁
解析
在消费者与生产者的问题中,信号量 mutex 用于实现临界区(环形缓冲区)的互斥,信号量 fullness 用于指示环形缓冲区中满缓冲区数目,信号量 emptiness 用于指示环形缓冲区中空缓冲区数目。根据题意,在这些消费者进程中,若先执行 P (mutex)进入到临界区中,再执行 P (fullness)从满缓冲区中取产品,假设当消费者进入临界区,而满缓冲区数目为 0,那么此刻需要等待生产者向缓冲区投入产品,而消费者又占用了临界区,生产者会等着消费者退出临界区,消费者又等待生产者向缓冲区投入产品,那么可能会发生死锁。
转载请注明出处。