2010-07-08 62 views
2

如何通過包含用於鎖定和解鎖的掛鉤函數的注入DLL來設置死鎖檢測的算法。通過注入DeadLock檢測

其實我想用device和algorithem來檢測死鎖。請問,如果有人能在這方面讓我。

+0

我相當肯定我看到一篇文章在微軟雜誌(MSJ? MSDN?),正是關於這個話題。一定是1997或98,因爲我還在上大學 – MSalters 2010-07-08 13:22:47

回答

3

概念上的死鎖檢測原則上很簡單,但很難實現。

從高級角度來看,你想要記錄每個線程持有的鎖,看看獲取鎖是否會導致死鎖。你可以用一個依賴圖形象化這個循環,這個循環意味着一個死鎖。

但是,還有其他操作可用於同步:例如,旋轉鎖定。這些會破壞任何檢測嘗試,所以要注意限制。

因此,讓我們先來模擬:想象一下,3線(T1,T2,T3)和3個互斥(M1,M2,M3)

  • T1搶M1
  • T2搶M2,等待M1
  • T3搶M3,等待M2

如果T1等待你擰M3(你有一個週期),從而試圖抓住之前,你需要檢查這個條件。

可以使用模型化的:

  • 一個表,其中列出了線程持有一個給定的互斥
  • 的圖形,代表線程

之間的依賴關係。如果我們模型化的情況時, T1試圖抓取M3我們有:

Table 
M1 -> T1, 
M2 -> T2, 
M3 -> T3, 

Graph 
{T1, T2, T3} x {T2 -> T1, T3 -> T2} 

T1試圖搶M3

  • 它查表並列出線程拿着它,在這裏T3
  • 它檢查在圖形中添加邊緣T1 -> T3是否形成一個循環。
0

一個簡單的算法正在爲資源分配製作一個等待圖...

用於該U維持像

結構過程

{

int process_id; 

    int curr_res; 

    int want_in_future; 

}的結構;

表示將....

(R1)-----> [P1] ------>(R2)

意思是...... R1一直分配給P1,現在這一進程將被渴望有R2在未來

但這種選擇可能會導致u到死鎖等

爲P1(R1)-----> [P1] ---- - >(R2)

對於p2(R2)-----> [P2] ------>(R 1)

一個循環的方式是否有如此的死鎖將存在