美文网首页
第二章(五)信号量习题

第二章(五)信号量习题

作者: Mr_Nuo | 来源:发表于2018-09-30 11:33 被阅读0次

1.黑白棋子问题

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

  (1)执黑子一方先下

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

   执黑子一方先下

  信号量:b=1,w=0

黑:

while(没结束){

  wait(b);

  下一黑棋;

  signal(w);

}

白:

while(没结束){

  wait(w);

  下一白棋;

  signal(b);

}

解题思想:

设了两个信号量,因为b=1,黑旗执行wait(b)操作时b=0,可以继续执行signal(w)操作。

但是在白旗中w=0,执行wait(w)操作时(w=-1)会被锁住,这是需要等黑旗执行signal(w)操作时(w=0)才可继续执行signal(b)操作,这样保证了黑旗先下然后再白旗下的顺序。

先抢到棋盘者先下,然后轮流下子

问题分析

无法用单纯的信号量操作完成,因为初始值无法设置固定值。

争抢棋盘需要一个互斥信号m;加入if控制与标志判断。利用互斥信号量与特殊标志变量的结合使用实现有序控制。

Semaphore  m=1;      //表示信号量m

turn=0;         //普通变量turn

while(没结束){

        p(m);

        if (turn!=2)       下一黑子;

         turn=2;

         v(m)

}

白:

while(没结束){

        p(m);

         if (turn!=1)      下一白子;

        turn=1;

        v(m)

解题思想:

通过使用信号量m实现了谁先抢到m,谁就先下棋。并且通过使用普通变量turn实现了下棋的顺序,不会出现连续下白旗或者黑旗的情况。

相关文章

  • 第二章(五)信号量习题

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

  • 第二章 信号量习题(5)

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

  • 第二章 习题

    title: 第二章 习题category: 习题date: 2019/08/13mathjax: true 1....

  • 【Python爬虫】-笨办法学 Python 习题01-10

    习题一: 习题二: 习题三: 习题四: 习题五: 习题六: 习题七: 习题八: 习题九: 习题十:

  • 整数与多项式-【目录】

    目录 习题 习题一 习题二 习题三 习题四 习题五 习题六 习题七 习题八 习题九 习题十 习题十一 知识点 这边...

  • 【Python爬虫】-笨办法学 Python 习题01

    习题一: 加分题: 习题二: 加分题 习题三: 加分题: 习题四: 加分题 习题五: 加分题 习题六 加分题 习题...

  • 第二章操作系统复习要点

    第二章操作系统复习要点 本章每次约3题 一、资源互斥(PV) 信号量包含两类,一类是公用信号量,他实现进程间的互斥...

  • 财管学习第3天

    早起又做了第一章的习题,错题减少。针对昨天第二章复习的内容,做第二章的习题,发现知识点掌握的不清楚,又返回来看书。...

  • 二.进程(5)信号量习题

    1. 读者与写者(写者优先方式) 2. 黑白棋问题 3. 嗜睡的理发师问题 4. 生产与销售问题 读者与写者问题 ...

  • 《Android开发艺术探索》第二章----IPC机制

    Android开发艺术探索 第二章IPC机制 Linux中IPC通信方式?答:命名管道,共享内存,信号量(具体再细...

网友评论

      本文标题:第二章(五)信号量习题

      本文链接:https://www.haomeiwen.com/subject/xyxwoftx.html