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

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

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

请回答:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕子鸽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值