第二章 信號量習題(5)

黑白棋子問題

兩個人下棋,一方執黑棋,一方執白棋。要求雙方輪流下子。給出兩種情況的解決辦法:

?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賦值為和自己互斥的量 這就保證了不能一直是黑子下 或者 一直是白字下

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在C語言中,五種基本數據類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,392評論 0 2
  • 人是什么? 我最近常在想這個問題,我是誰?我為什么來到這里?為什么要做事?為什么痛苦歡樂? 我的軀體如同行尸走肉,...
    老喵86閱讀 194評論 0 0
  • 我在金寨吳家店鎮三年半。這個小鎮子能讓我們外地人覺得是美食的東西非常少,尤其是2013年剛來的時候。本地人喜歡用頭...
    聞飯飯閱讀 294評論 0 0
  • 鳥巢馬拉松的熱勁逐漸過去,當所有人都不在拼命尋找自己的照片,訴說自己的心得,當我們的心漸漸歸于平靜時,這時候的回憶...
    百日跑者孫大剩閱讀 679評論 1 7