生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:
- (1)进程 A 专门拣黑子,进程 B 专门拣白子;
- (2)每个进程每次只拣一子,当一个进程在拣子时不允许另一个进程去拣子;当一个进程拣一子后,必须让另一进程去拣一子。
请回答:
- 这两个并发进程之间的关系是同步还是互斥 ;
- 用
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;