黑白棋子问题
1、问题描述 两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。
给出两种情况的解决办法:1)执黑子一方先下。 2)双方都可以先下,谁先抢到棋盘谁先下。
2、解决
情况1)信号量:bfg=1,wfg=0
//注意信号量及初值的设置,保证黑方先下子且之后双方轮流下子。
seamphore bfg=1,wfg=0;
void main()
{
black();
white();
}
void black()
{
while(true)
{
wait(bfg);//
if whereput()
{put a black qizi;}//下一黑棋
else break;
signal(wfg);//
}
}
void white()
{
while(true)
{
wait(wfg);//
if whereput()
{put a white qizi;}//下一白棋
else break;
signal(bfg);//
}
}
情况2)争抢棋盘需要一个互斥信号m;加入if控制与标志判断。利用互斥信号量与特殊标志变量的结合使用实现有序控制。
下面给出两种实现方案。