现有三个进程,Reader进程把键盘输入的一个整数读入缓冲区B1,Executor进程把B1中的数据取出进行处理,处理完后存到输出缓冲区B2,最后由Printer进程将B2中的数据打印出来。假设B1和B2都只能存放一个整数,请用PV操作管理这三个并发进程的执行。
本题也可看作是两个生产者消费者问题。Reader进程为生产者,Executor进程既是消费者又是生产者,Printer进程为消费者,由于这里有两个缓冲区,所以要设四个信号量:SR表示是否能把数据存入缓冲区B1,初值为1;SE1表示缓冲区B1中是否已存有数据可供处理,初值为0;SE2表示是否把处理过的数据存入缓冲区B2,初值为1;SP表示缓冲区B2中是否已有数据可供打印,初值为0。用PV操作管理这三个并发进程的程序如下:beginB1,B2:integer;SR,SE1,SE2,SP:semaphore;SR:=1;SE1:=0;SE2:=1;SP:=0;cobeginPROCESSReadernumber:integer;beginL1:readanumber;P(SR);B1:=number;V(SE1);gotoL1end;PROCESSExecutornumber2:integer;beginL2:P(SE1);takeanumberfromB1;V(SR);processthenumbertonumber2;P(SE2);B2:=number2;V(SP);gotoL2end;PROCESSPrinterbeginL3:P(SP);takeanumberfromB2;V(SE2);printthenumber;gotoL3endcoendend