有3個并發(fā)進(jìn)程R、M、P,它們共享同一個緩沖區(qū),假定緩沖區(qū)只能存放一條記錄。進(jìn)程R負(fù)責(zé)從輸入設(shè)備讀信息,每讀入一個記錄后,就把它放進(jìn)緩沖區(qū);進(jìn)程
M在緩沖區(qū)中加工讀入的記錄;進(jìn)程P把加工后的記錄打印輸出。讀入的記錄經(jīng)加工輸出后,緩沖區(qū)又可以存放下一個記錄。試寫出他們能夠正確執(zhí)行的并發(fā)程序。
PV原語:
三個進(jìn)程共用一個緩沖區(qū),他們必須同步工作,可定義三個信號量:
S1:表示是否可把讀人的記錄放到緩沖區(qū),初始值為1.
S2:表示是否可對緩沖區(qū)中的記錄加工,初始值為0.
S3:表示記錄是否加工好,可以輸出,初始值也為0.
三個進(jìn)程可如下設(shè)計:
begin
S1,S2,S3:semaphore;
S1:=l;S2:=S3:=0;
cobegin
process R
begin
L1:讀記錄;
P(S1);
記錄存入緩沖區(qū);
V(S2);
goto L1;
end;
process M
begin
L2:P(S2);
加工記錄;
V(S3);
goto L2;
end;
process P
begin
L3:P(S3);
輸出加工后的記錄;
V(S1);
goto L3;
end;
coend;
end.