问题描述:两人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法。
1)执黑子一方先下
2)双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子。
1.黑棋先下
黑:
while(没结束){
wait(b);
下一黑棋;
signal(w);
}
白:
while(没结束){
wait(w);
下一白棋;
signal(b);
}
2.设先抢到谁先下
seamphore bf=1; wfg=0; m=1;
boolean fg=F;
void main(){
black();
white();
}
void black(){
wait(m);
if!fg { bfg=1; wfg=0; fg=T}
signal(m) ;
while(ture){
wait(bfg);
if whereput()
put a black qizi;
}
}
void white(){
wait(m);
if!fg { bfg=0; wfg=1; fg=T}
signal(m) ;
while(ture){
wait(wfg);
put a black qizi;
}
}