[26][30][单选]有 n 个消费者进程 Q1、Q2、...、Qn,其伪码如下:
j = 0; while (true { wait (full; //full 初始值为 0 P (mutex; //mutex 初始值为 1 buffer[j] = produce item; //生产产品 j = (j + 1 mod k; //k 为缓冲区大小 V (mutex; V (empty; //empty 初始值为 C,C >= 0,整数 } 这些消费者进程在执行过程中,可能会出现下列哪一种现象?
可能死锁
正常运行
出现饥饿
产生饥饿
答案
正常运行
解析
当进程进行了 n 次消费后或每个消费者,每人都消费一个产品,当缓冲区为空时,消费者可以从缓冲区取出产品,执行 Vmutex操作此时 mutex = 1,然后判断缓冲区大小,如果缓冲区是满的,则执行 Vempty操作,所以该过程不会出现死锁,能正常运行,因为过程中会判断缓冲区的大小,不会让消费者从空的缓冲区里取产品,故选 B 选项。
转载请注明出处。