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

admin2014-04-17  28

问题 在下列代码中,有3个进程P1、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);
    pute(’C’),    putc(’A’);    putc(’D’);
    V(R);    putc(’B’);    }
    }    V(R);
    }

选项

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

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

最新回复(0)