為什麼這篇死結四個條件鄉民發文收入到精華區:因為在死結四個條件這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者YankSC (′‧ω‧‵)看板Grad-ProbAsk標題Re: [理工] OS 死結成立的條...
※ 引述《cutesteven (原野漫遊)》之銘言:
: 我想問的是
: 死結成立的4個條件:1.mutual exclusion
: 2.hold & wait
: 3.no preemption
: 4.circular waiting
: 到底是"必要"條件or"充要"條件??
: 恐龍原文7版是寫"必要條件"而系統同時滿足這些條件"can"arise..
: (can的意思絕對跟must/will不同,但這裡不確定課本要表達的@@)
: 而洪X上課還特別強調都滿足不一定會Deadlock..
: 但我沒印象他說用什麼來證明~
: 有請神人解釋?
: ps.來源題目97交大資聯OS第2-(3)http://ppt.cc/EP_E (題目寫"will arise")
: 到底要選誰?! 尤其是A和B
若四個條件同時發生,死結發生應該是沒有疑義的。
詳閱:http://en.wikipedia.org/wiki/Deadlock#Necessary_conditions
如果加上Circular Waiting的話,即可就可保證Deadlock Situation
或者你上課時是記成Resource Allocation Graph中有 Cycle 但不一定有死結?
B選項以利用 Semaphore 製作Hoare Monitor 為例
x_count = x_count +1 ;
if Next_count>0 then signal(Next) ;
x.wait else signal(mutex);
wait(x_sem) ;
x_count =x_count -1 ;
if x.count>0 then
begin
Next_count = Next_count + 1 ;
x.signal signal (x_sem) ;
wait (Next) ;
Next_count = Next_count -1 ;
end ;
都有作存取判斷。
或是以直觀來想,若是沒有Process在wait就執行signal的話
那存取的變數就平白多加一了
在此變數為 2 的情況之下 之後存取時
wait就允許有兩個Process同時進入Critical Section了 -> 違反Mutual Exclusion
- -
有錯請指教 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.176.27