A. 什麼是死鎖解決死鎖有那幾種策略這些策略分別有哪些實現方法
什麼是死鎖?如果一個進程集合裡面的每個進程都在等待只能由這個集合中的其他一個進程(包括他自身)才能引發的事件,這種情況就是死鎖。這個定義可能有點拗口,一個最簡單的例子就是有資源a和資源b,都是不可剝奪資源,現在進程c已經申請了資源a,進程d也申請了資源b,進程c接下來的操作需要用到資源b,而進程d恰好也在申請資源a,那麼就引發了死鎖。這個肯定每個人都看過了。然後套用回去定義:如果一個進程集合裡面(進程c和進程d)的每個進程(進程c和進程d)都在等待只能由這個集合中的其他一個進程(對於進程c,他在等進程d;對於進程d,他在等進程c)才能引發的事件(釋放相應資源)。這里的資源包括了軟的資源(代碼塊)和硬的資源(例如掃描儀)。資源一般可以分兩種:可剝奪資源(preemptable)和不可剝奪資源(nonpreemptable)。一般來說對於由可剝奪資源引起的死鎖可以由系統的重新分配資源來解決,所以一般來說大家說的死鎖都是由於不可剝奪資源所引起的。死鎖的四個必要條件互斥條件(mutual
exclusion):資源不能被共享,只能由一個進程使用。
請求與保持條件(hold
and
wait):已經得到資源的進程可以再次申請新的資源。
非剝奪條件(no
pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。
2.檢測死鎖並且恢復。
3.仔細地對資源進行動態分配,以避免死鎖。
4.通過破除死鎖四個必要條件之一,來防止死鎖產生。