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

第二章 信号量习题(5)

作者: w王好人w | 来源:发表于2018-09-27 22:33 被阅读0次

    黑白棋子问题

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

     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赋值为和自己互斥的量 这就保证了不能一直是黑子下 或者 一直是白字下

    相关文章

      网友评论

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

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