美文网首页
黑白棋子问题

黑白棋子问题

作者: i_2c86 | 来源:发表于2018-10-10 10:34 被阅读0次

    问题描述

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

    1)执黑子一方先下

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


    1)执黑子一方先下信号量:b=1,w=0

    黑:

    while(没结束){

    wait(b);

    下一黑棋;

    signal(w);

    }

    白:

    while(没结束){

    wait(w);

    下一白棋;

    signal(b);

    }

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

    问题分析:

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

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

    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)

    相关文章

      网友评论

          本文标题:黑白棋子问题

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