进程同步习题——棋子问题

2021-01-21 10:30:17 浏览数 (1)

生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:

  • (1)进程 A 专门拣黑子,进程 B 专门拣白子;
  • (2)每个进程每次只拣一子,当一个进程在拣子时不允许另一个进程去拣子;当一个进程拣一子后,必须让另一进程去拣一子。

请回答:

  1. 这两个并发进程之间的关系是同步还是互斥 ;
  2. waitsignal 操作管理时,写出所定义的信号量和初值;
  3. 根据定义的信号量,在下列空白处填入应执行的 waitsignal 操作,以保证并发进程的正确执行。

第一步:确定进程间的关系。由功能(1)(2)(3)可知,进程间的关系为 同步 关系。

第二步:确定信号量及其值。进程 AB 共享箱子这个公有资源,但规定两个进程必须轮流去取不同色的棋子,因而相互间要互通消息。对于进程 A 可设置一个私有信号量 s1,该私有信号量用于判断进程 A 是否能去拣黑子,初值为 1。对于进程 B 同样设置一个私有信号量 s2 ,该私有信号量用于判断进程 B 是否能去拣白子,初值为 0 。当然你也可以设置 s1 初值为 0s2 初值为 1

代码语言:javascript复制
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;

0 人点赞