作者keke0421 (zrae)
看板Grad-ProbAsk
標題[理工] OS-semaphore(哲學家的晚餐)
時間Mon Nov 19 12:00:51 2012
大家好
我是看洪逸老師的筆記
看到利用semaphore解決哲學家的晚餐code如下
共享變數
chopstick[0..4] of semaphore = 1
對pi程式如下:
repeat
wait(chopstick[i]);//拿左邊
wait(chopstick[(i+1)%5];//再拿右邊
eating
signal(chopstick[i]);//放左邊
signal(chopstick[(i+1)%5];//放右邊
thinking
until false
這是錯的
後來洪逸提出[法一]
最多允許4為哲學家上桌吃飯
證明我就省略了
老師的講義上面寫 增加一個no:semaphore=4
wait(no);
.
.
.
.
signal(no);
我不懂得是 就算4個人 也沒辦法吧?
比如說
第一個p0近來拿了 0 , 1 chopstick
第二個p1近來拿了 1 , 2 chopstick
光到這邊 1的筷子不就重複被拿了嗎?這樣怎麼吃飯呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.250.31
※ 編輯: keke0421 來自: 140.113.250.31 (11/19 12:01)
推 shcyril:這個解決方案是針對死結的避免 在五個資源下至多四個行程 11/19 12:32
→ shcyril:確保至少一個行程可以兩邊取得資源的意思 11/19 12:39
→ keke0421:感謝 11/19 18:18