黑白棋子问题
两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法:
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赋值为和自己互斥的量 这就保证了不能一直是黑子下 或者 一直是白字下