176

问答题 176 /176

两个并发执行的进程A和B的程序如下:
进程A
  Repeat
     N=N+5;
 Until false;
进程B
  Repeat
     打印N的值;
     N=0;
  Until false;
   其中N为整数,初值为4。若进程A先执行了三个循环后,进程A和进程B又并发执行了一个循环,写出可能出现的打印值。正确的打印值应该是多少?请用P、V操作进行管理,使进程A和B并发执行时不会出现与时间有关的错误。

参考答案

因为N初值为4,若进程A先执行了三个循环,此时N的值为19。当进程A和进程B并发执行时可能会有如下两种执行次序,即进程A先执行一次循环,然后再进程B执行一次循环,此时打印的是正确值24,执行后N中的值为0。但若进程B先执行一次循环,然后再进程A执行一次循环,则打印的值是19,执行后N中的值是5。这是错误的,即发生了与时间有关的错误。用P、V操作进行管理,使进程A和B并发时不会出现与时间有关的错误的程序如下:(S为互斥信号量,初值为1),
进程A
   Repeat
     P(S);
     N=N+5;
     V(S);
   Until false;
进程B
  Repeat
    P(S);
    打印N的值;
    N=0;
    V(S);
  Until false;