1. 程式人生 > >併發(二)--------------死鎖

併發(二)--------------死鎖

併發處理中通常需要解決的兩個問題:死鎖和飢餓

產生死鎖的原因主要是

  1. 系統資源不足。
  2. 程序執行推進的順序不合適。
  3. 資源分配不當等。

死鎖的條件 

死鎖有三個必要條件:

·1.互斥。一次只有一個程序可以使用一個資源。

2.·佔有且等待。當一個程序等待其他程序時,繼續佔有已經分配的資源。

·3.不可搶佔。不能強行搶佔程序已佔有的資源。

前三個條件都只是死鎖存在的必要條件,但不是充分條件。對死鎖的產生,還需要第四個條件:

·4.迴圈等待。存在一個封閉的程序鏈,使得每個程序至少佔有此鏈中下一個程序所需要的一個資源。

 死鎖的處理方法 

  • 死鎖預防

破壞死鎖的四個必要條件中的一個或多個來預防死鎖。

  • 死鎖檢測與死鎖恢復

不試圖阻止死鎖,而是當檢測到死鎖發生時,採取措施進行恢復。

(一)每種型別一個資源的死鎖檢測 (二)每種型別多個資源的死鎖檢測 (三)死鎖恢復

利用搶佔恢復
利用回滾恢復
通過殺死程序恢復
  • 死鎖避免
  • 銀行家演算法:(Banker’s Algorithm)是一個避免死鎖(Deadlock)的著名演算法,是由艾茲格·迪傑斯特拉在1965年為T.H.E系統設計的一種避免死鎖產生的演算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全執行。