[24][30][单选]有 n 个生产者进程 P1、P2、…、Pn,其伪代码如下:
i = 0; while (true { 生产产品; P(empty; //empty 初值为 C,C > 0,整数 P(mutex; //mutex 初值为 1 往 Buffer[i]中放产品; i = (i + 1 mod K; //K 为缓冲区大小 V(mutex; V(full; //full 初值为 0 } 这些生产者进程在执行过程中,可能出现下列哪一种现象?
正常运行
可能死锁
出现活锁
产生饥饿
答案
正常运行
解析
当进程进行 n 次循环后或 n 个生产者,每人都生产一个产品,当缓冲区为空的时候,生产者可以向缓冲区生产产品。执行 P(empty取产品此时 mutex = 1,然后判断缓冲区大小,如果缓冲区不为空,则执行 V(mutex放入产品。所以这个过程不会发生死锁,能正常运行,因为过程中会判断缓冲区的大小,不会让生产者向已满的缓冲区里生产产品。涉及考点为第 8 章 死锁。
转载请注明出处。