第二章 信号量习题(5)

黑白棋子问题

两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法:

 1)执黑子一方先下

2)双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子。

信号量:b=1,w=0

黑:

while(没结束){

  wait(b);

  下一黑棋;

  signal(w);

}

白:

while(没结束){

  wait(w);

  下一白棋;

  signal(b);

}


先定义信号量b=1,w=0;

黑子先wait(b) 白子先wait(w) 一旦定义信号量时定义了b=1 w=0

这就说明只能是黑子先下 因为黑子是1 wait后可以继续执行 只有在黑子下完后signal(w)后w+1后白字才能再下。

双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子:

Semaphore 

  m=1;

turn=0;

while(没结束){

p(m)

if (turn!=2)

  下一黑子;

  turn=2;

  v(m)

}

白:

while(没结束){

  p(m);

  if (turn!=1)

  下一白子;

  turn=1;

  v(m)

定义了信号量m=1 都先P(m) 后都可以继续往下执行 这就决定了谁先抢到棋盘谁先下,因为turn初始值为0 都判断了turn后都可以往下执行  但是谁执行了 谁就把turn赋值为和自己互斥的量 这就保证了不能一直是黑子下 或者 一直是白字下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,132评论 0 2
  • 人是什么? 我最近常在想这个问题,我是谁?我为什么来到这里?为什么要做事?为什么痛苦欢乐? 我的躯体如同行尸走肉,...
    老喵86阅读 1,504评论 0 0
  • 我在金寨吴家店镇三年半。这个小镇子能让我们外地人觉得是美食的东西非常少,尤其是2013年刚来的时候。本地人喜欢用头...
    闻饭饭阅读 2,383评论 0 0
  • 鸟巢马拉松的热劲逐渐过去,当所有人都不在拼命寻找自己的照片,诉说自己的心得,当我们的心渐渐归于平静时,这时候的回忆...
    百日跑者孙大剩阅读 3,978评论 1 7

友情链接更多精彩内容