黑白棋子問題
兩個人下棋,一方執黑棋,一方執白棋。要求雙方輪流下子。給出兩種情況的解決辦法:
?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賦值為和自己互斥的量 這就保證了不能一直是黑子下 或者 一直是白字下