应用题
8.假定系统有三个并发进程read、move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一条记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一条记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一条记录。要求三个进程协调完成任务,使打印出来的与读入的记录的条数,次序完全一样。请用wait和signal原语写出它们的并发程序。
【正确答案】begin SR,SM1,SM2,SP:semaphore;
B1,B2:record;
SR:=1;SM1:=0:SM2:=1;SP:=0;
cobegin
process read
X:record;
begin R:(接收来自输入设备上一条记录)
X:=接收的一条记录;
wait(SR);
B1:=X;
signal(SMl):
goto R;
end;
Process move
Y:record;
begin
M:wait(SM 1);
Y:=B1;
Signal(SR)
加工Y
wait(SM2):
B2:=Y;
signal(SP);
goto M;
end;
Process print
Z:record;
begin
P:wait(SP):
Z:=B2:
signal(SM2)
打印Z
goto P;
end;
coend i
end:
【答案解析】