看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《poyao (嘎唄)》之銘言: : 今天上洪逸的課時 : 講到Hardware Instruction Support的第二個演算法時 : 他說如果把演算法中waiting[i]=False;刪掉會如何? : 在筆記裡有說違反Progress<i><ii> : 但是他說違反<i>是因為Pj離開C.S時會偵測到Pi想進入C.S : 所以Pj會把改變waiting[i]為false而lock仍維持true : 然而Pi不想進入C.S : 已違背Progress<i> : 但是我發現等Pj出了C.S後偵測到Pi時 : 不是有個判斷if(j==i)lock=false; : 所以這個地方應該是先把lock改為false : 而不是把waiting[i]改為false : 請問是老師講錯了? : 還是有其他解釋為何違反progress的方法? 當Pj出CS後,此時waiting[i]仍為True,所以Pj會認為Pi想進入CS 但此時Pi並不想進入CS,所以if條件並不會成立 (if(i==j) Lock=False;成立的條件簡單來說就是i是否繞完一圈了 【情況一】waiting[i]==False 代表沒有人想進入process,所以順利繞完一圈,最後i會等於j 此時if條件成立,會執行Lock=False 注意:此情況不會發生,因為waiting[i]已被移除 【情況二】waiting[i]==True 代表Pi想進入CS,所以並不會繞完一圈,而此時的i並不等於j 所以if條件不成立,會執行waiting[i]=False 此時Pi被迫進入CS,造成其他人無法進入CS,形成deadlock) 注意:因為waiting[i]已被移除,所以只會發生此種情況 違反progress(i)的原因: Pi並不想進入CS,但Pj(在RS)卻參與進入CS之決策,強迫Pi進入CS 違反progress(ii)的原因: 因為【情況二】之發生,形成deadlock 希望有解決你的問題,有說明錯誤的地方再麻煩大家指證,感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.182.207 ※ 文章網址: http://www.ptt.cc/bbs/Grad-ProbAsk/M.1405880482.A.64D.html ※ 編輯: HiltonCool (114.44.182.207), 07/21/2014 02:23:37
poyao:原來是waiting[i]被移除囉~我懂了!謝謝你~~ 07/21 19:08