设进程P、Q共享一台打印机,打印机任一时刻只能被一个进程所使用,而不能同时使用。P、Q进程程序如下:
begin
busy:boolean;
busy:=false;
cobegin
processP
begin
L:ifbusythengotoL
busy:=true;
进程P使用打印机;
busy:=false;
gotoL:
end:
设进程P、Q共享一台打印机,打印机任一时刻只能被一个进程所使用,而不能同时使用。P、Q进程程序如下:
begin
busy:boolean;
busy:=false;
cobegin
processP
begin
L:ifbusythengotoL
busy:=true;
进程P使用打印机;
busy:=false;
gotoL:
end:
processQ
N:ifbusythengotoN
busy:=true;
进程Q使用打印机;
busy:=false;
gotoN;
end;
coend;
end.
(1)上面的并发程序段能保证同一时刻只有一个进程使用打印机吗?为什么?
(2)上面程序不利于充分发挥处理器的效率,为什么?
(3)试用一同步机制重新编写上述程序,使之既能发挥处理器的效率,又能保证两个进程不同时使用打印机。
【正确答案】:(1)不能保证同一时刻只有一个进程使用打印机。因为当进程P检测到打印机不忙后,刚准备执行busy:=true语句时,如果出现中断(如时间片到)而让Q进程执行,此时busy的值是FALSE,进程Q就能使用打印机,而在此过程中Q也可能被中断, 而使得P可以从刚才的断点处继续执行,进程P执行busy:=true,也使用打印机,这样,两个进程就会同时使用了打印机。
(2)因为进程P和Q测试打印机忙时仍然不停地循环测试,占用CPU,因而降低了处理器的效率,用来作忙等待,当测试打印机忙时,该进程应当处于等待状态,让出处理器。
(3)利用PV操作可以保证两个进程不同时使用打印机,又能充分发挥处理器的效率:
begin
   S:semaphore;
   S:=1;
  cobegin
  process P                  process Q 
     begin                        begin
        L1:P(s);                 L2:P(s);
           进程P使用打印机;    进程Q使用打印机;
           V(s);                          V(s);
           goto L1;                    goto L2;
           end;                          end;
  coend;
end.
【题目解析】:考点:并发进程
Top