今有三个并发进程R、M、P,他们共享有一个缓冲区,R负责从输入设备读信息,每读一记录后,把它存放在缓冲区;M在缓冲区加工读入的记录;P把加工后的记录打印输出。读入的记录经加工输出后,缓冲区中又可以存放下一个记录。试用PV操作为同步机制写出他们并发执行时能正确工作的程序。
S1:表示是否可以把记录放缓冲区。由于缓冲区只能放一条记录,所以S1的初为“1”。S2:表示缓冲区中是否有记录,显然,开始时,初值为“0”。S3:表示是否可以打印输出,显然,开始时,初值为“0”。程序如下:beginBuffer:integer;S1,S2,S3:Semaphore;S1:=1;S2:=0;S3:=0;CobeginprocessRbeginL1:读一条记录信息;P(S1);buffer:=一条记录信息;V(S2);gotoL1end;processMbeginL2:P(S2);加工信息;V(S3);gotoL2end;processPbeginL3:P(S3);V(S1);gotoL3endCoendend