在下列代码中,有3个进程Pl、P2和P3,它们使用了字符输出函数putc来进行输出(每次输出一个字符),并使用了两个信号量L和R来进行进程间的同步。请问: 当这组进程在运行的时候,“CABACDBCABDD”是不是一种可能的输出序列,为什么? semap

admin2017-04-28  42

问题 在下列代码中,有3个进程Pl、P2和P3,它们使用了字符输出函数putc来进行输出(每次输出一个字符),并使用了两个信号量L和R来进行进程间的同步。请问:
当这组进程在运行的时候,“CABACDBCABDD”是不是一种可能的输出序列,为什么?
semaphore L=3,R=0;    /*初始化*/
/*进程P1*/    /+进程P2*/    /*进程P3*/
while(1)    while (1)    while (1)
{    {    {
P(L);    P(R);    P(R);
putc(’C’);    putc(’A’);    putc(’D’);
V (R);    putc(’B’);    }
}    V(R);
}

选项

答案可能。相当于进程P2在打印完第二个“A”的时候被中断了。 本题总结:本题是用PV操作实现进程同步的一个例子,由于L信号量只有Pl能访问,且只能是P操作,故导致R信号量最大值为3,剩下就是P2,P3对R信号量的使用问题,P2进程不会消耗R信号量,而P3会消耗。

解析
转载请注明原文地址:https://kaotiyun.com/show/0WRi777K
0

最新回复(0)