问答题 战地指挥官通过无线电不断地向他的3个士兵下达作战指令,但是他必须在得到所有士兵对前一条指令的“acknowledgement”之后才能下达新的指令。请使用P操作、V操作进行指挥官和士兵之间的协同管理,并对解题思路进行简要解释。
【正确答案】
【答案解析】思路如下:
type semaphore=monitor;
var acknowledgement1,acknowledgement2,acknowledgement3:boolean;
x,y:condition;
a,b,c:integer;
指挥官:begin
while acknowledgement1==false
or acknowledgement2==false
or acknowledgement3==false
do x.wait;
下达命令;
a:=1;
b:=1;
c:=1;
y.signal;
end
士兵1:begin
while a==0 do y.wait;
接收命令;
acknowledgement1=true;
x.signal;
end
士兵2:begin
while a==0 do y.wait;
接收命令;
acknowledgement2:true;
x.signal:
end
士兵3:begin
while a==0 do y.wait;
接收命令;
acknowledgement3:true;
X.signal;
end
begin
a:=0;
b:=0;
c:=0;
acknowledgement1:=false;
acknowledgement2:=false;
acknowledgement3:=false;
end