2016年12月5日 星期一

哲學家的筷子啦啦啦啦

就是有五個哲學家~
他們每個人只有1枝筷子~
但他們只會用一雙筷子吃飯~不會用1枝筷子吃飯~
他們每個人都肚子很餓~只好跟別人借~但大家又想快點把飯吃完~
該怎麼做呢?

 其實這是個資料庫交易問題~
有兩筆交易都需要對方的資源~
但要等自己的交易做完~才會釋放自己的資源給別人用~
這樣就會造成所謂的死結~

而所謂的交易就是一個程式碼指令或動作~
可以想像成你身體~你的手肘想往上~而你的手腕想往下~
兩個就會僵持不下~可是兩個都只考慮自己~
這就是死鎖或稱死結

死結的四個條件是:
禁止搶占:no preemption
持有和等待:hold and wait
互斥:mutual exclusion
迴圈等待:circular waiting
預防死結就是至少破壞這四個條件其中一項,即破壞「禁止搶占」、破壞「持有等待」、破壞「資源互斥」和破壞「迴圈等待」。

同樣也可以把一個或多個行程回滾到先前的某個狀態。如果一個行程被多次回滾,遲遲不能占用必需的系統資源,可能會導致行程飢餓。
(註:回滾大概是暫時取消交易~退回還沒交易的狀態~但保留下次執行該交易)

以上的答案是看"危機百顆"的~只是吃個飯~好麻煩

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...