前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进程同步习题——棋子问题

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

作者头像
wsuo
发布2021-01-21 10:30:17
8540
发布2021-01-21 10:30:17
举报
文章被收录于专栏:技术进阶之路技术进阶之路

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

  • (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;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档