作者Byzantin (拜占庭)
看板Grad-ProbAsk
標題Re: [理工] [OS] 97台大電機
時間Sun Jul 31 23:58:44 2011
這題正解應該是都滿足,
解答之所以會說progress不滿足,我猜是漏看了一行:
We assume that each line of statement in the algorithm is atomic.
而原PO似乎也犯了同樣錯誤,沒有把題目該行附上,
atomic是指該行指令是一氣呵成完成的,也就是中途不會受到干擾
所以如果不是atomic,則
ticket[p] = count = count + 1;
可能會使兩process寫入count的值時因順序交錯而產生race condition的問題
導致出現相同的count值(或ticket[p]值)
於是兩個process都會卡在while loop,
因此不滿足progress(無法在有限時間決定誰進入CS)
如果加上atomic這個條件,則不會發生上述問題
而mutual exclusion滿足是因為兩ticket值比較一定有一個較小一個較大,
只有一個能進入CS
bounded waiting滿足是因為剛從CS出來的process若想再次進入,
ticket的值會是前一次count值加一,一定較大,會使另一process進入CS
因此三條件皆滿足
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.254.139.102
→ wheels:拍謝 雞婆一點幫你修正一下^^" 是count值被assign兩次後兩 08/01 00:40
→ wheels:邊都抓到同樣的值當ticket 不是會出現相同的count值 08/01 00:41
→ wheels:因為count是global vairable這邊語意這樣會有點問題^^" 08/01 00:42
→ wheels:不過我想你的意思就是我說的這樣啦 sorry雞婆了XD 08/01 00:42
推 wheels:而且我覺得mutual exclusion不滿足 08/01 01:11
推 wheels:對不起,你的文章我沒看完整,atomic下的確是都滿足 08/01 01:31
推 wheels:...搞了半天還是洪傑對了,看我的第二篇回文吧^^" 08/01 01:42
→ wheels:上面那行當我沒說XD 你是對的! 08/01 12:51
推 wheels:這個case有加atomic完全就是Software solution algo3的翻版 08/01 12:57