黑白棋子问题

问题描述

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

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)

你可能感兴趣的:(黑白棋子问题)