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