当前位置:首页 > 4444临时 > 正文内容

[25][30][单选]有 n 个生产者进程 P1、P2、...、Pn,其伪代码如下:

4444临时3个月前 (02-02)

item buffer[n]; int mutex = 1; int empty = n; int full = 0; int i = 0; producer{    while(1 {        produce_item(;        wait(mutex;        if (empty > 0 {            buffer[i] = item;            i = (i + 1 % n;            signal(mutex;            signal(empty;            signal(full;        } else {            signal(mutex;        }    } consumer{    while(1 {        wait(full;        wait(mutex;        if (full > 0 {            item = buffer[i];            i = (i + 1 % n;            signal(mutex;            signal(empty;        } else {            signal(mutex;        }        consume_item(;    } 这些生产者进程在执行过程中,可能会出现下列哪一种现象?

产生饥饿

正常运行

出现死锁

可能死锁

答案

可能死锁

解析

当进行 n 次生产后有 n 个生产者,每人都生产了一个产品后,缓冲区全部占满empty = 0生产者执行 P(mutex后此时 mutex = 0,又执行了 P(empty,由于 empty = -1,使生产者因无可用缓冲区而在 empty 上等待。若再有一个消费者进程到达,执行 P(full此时 full = 0,又执行了 P(mutex,由于 mutex = -1,使消费者因无可用缓冲区而在 mutex 上等待。此时,生产者、消费者都因此等待对方来唤醒自己处于循环等待状态。生产者等待消费者释放一个空缓冲区,而消费者等待生产者释放互斥信号量 mutex,这样便形成了死锁状态。所以选择 D 选项。


转载请注明出处。

本文链接:http://pythonopen.com/?id=7176

相关文章

[12][1][单选]操作系统作为系统软件,位于软件系统的哪一个层面

硬件之上,支撑软件之下支撑软件之上,应用软件之下应用软件之上,支撑软件之下硬件之上,软件系统之下答案...

[12][2][单选]系统调用与一般过程调用是不同的,下列对它们的调用程序和被调用程序的描述中,哪一个是正确的

过程调用和系统调用的调用程序和被调用程序均位于核心态过程调用和系统调用的调用程序和被调用程序均位于用...

[12][6][单选]进程控制块PCB的内容一般可以分成调度信息和现场信息两大部分,下列哪一个属于现场信息

当前状态存储信息优先级程序状态字答案程序状态字解析进程控制块PCB的内容一般可以分成调度信息和现场信...

[12][7][单选]某4核处理器的计算机系统中共有50个进程,那么,处于运行状态的进程最多有几个

45010答案4解析由题目可知计算机系统中处理器是4核心的,也就是意味着同时可以执行4个进程的指令,...

[12][8][单选]当使用进程创建原语创建进程时,下列哪一个选项表示创建的顺序是正确的

申请PCB,填写PCB,放入运行队列申请PCB,填写PCB,放入就绪队列申请PCB,申请内存,填写P...

[12][9][单选]对于如下C语言程序

int main({pid_t pid;int a = 1;pid = fork(;if(pid =...