生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:
请回答:
wait
、signal
操作管理时,写出所定义的信号量和初值;wait
、signal
操作,以保证并发进程的正确执行。第一步:确定进程间的关系。由功能(1)(2)(3)可知,进程间的关系为 同步
关系。
第二步:确定信号量及其值。进程 A
和 B
共享箱子这个公有资源,但规定两个进程必须轮流去取不同色的棋子,因而相互间要互通消息。对于进程 A
可设置一个私有信号量 s1
,该私有信号量用于判断进程 A 是否能去拣黑子,初值为 1
。对于进程 B
同样设置一个私有信号量 s2
,该私有信号量用于判断进程 B
是否能去拣白子,初值为 0
。当然你也可以设置 s1
初值为 0
,s2
初值为 1
。
begin
s1,s2: semaphore;
s1:=1;s2:=0;
cobegin
process A
begin
L1: P(s1);
拣黑子;
V(s2);
goto L1;
end;
process B
begin
L2: P(s2);
拣白子;
V(s1);
goto L2;
end;
coend;
end;