问答题
在下列代码中,有3个进程P1、P2和P3,它们使用了字符输出函数putc来进行输出(每次输出一个字符),并使用了两个信号量L和R来进行进程间的同步。请问:
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);
}
问答题
这组进程在运行时,最后打印出来了多少个“D”字符?
【正确答案】最后打印了3个字符“D”。因为输出“D”的进程只有P3,而P3只有在P1进程运行完之后才能运行,又L值为3,故P1进程只能循环3次。所以最后打印了3个“D”。
【答案解析】
问答题
当这组进程在运行的时候,在何种情形下,打印出来的字符“A”的个数是最少的,最少的个数是多少?
【正确答案】最少可能打印了0个字符“A”,例如,P1连续执行了3次,然后P3连续执行了3次,P2一次也没有执行。
【答案解析】
问答题
当这组进程在运行的时候,“CABABDDCABCABD”是不是一种可能的输出序列,为什么?
【正确答案】不可能,因为当打印出前面的“CABAB”的时候,信号量R的值等于1,此时,不可能连续打印两个“D”。
【答案解析】
问答题
当这组进程在运行的时候,“CABACDBCABDD”是不是一种可能的输出序列,为什么?
【正确答案】可能。相当于进程P2在打印完第二个“A”的时候被中断了。
【答案解析】