我一直工作在鎖樹死鎖檢測算法的一些例子,並一直無法找出死鎖在這種特殊情況是如何發生的:鎖樹算法死鎖檢測
Thread 1: Thread 2:
lock(A) lock(E)
lock(C) lock(D)
unlock(C) unlock(D)
lock(B) unlock(A)
lock(D) lock(A)
lock(E) lock(C)
unlock(E) unlock(C)
unlock(D) unlock(A)
unlock(B)
unlock(A)
從我的理解鎖定樹應該是這個樣子:
T1: T2:
/\
A E A
/\ | |
C B D C
|
D
|
E
難道是發生死鎖在節點T1:d - E和T2:電子 - d,因爲線程採取相反的順序這些鎖?
我怎麼能建議插入一個鎖和一個解鎖語句來消除死鎖?
哦,我現在看到它!謝謝。不過,我還有一個問題。如果我添加了T2:** lock(b)**,lock(e),lock(d),我能夠避免發生死鎖嗎?大概是 – Maputo 2012-08-13 08:51:30
。困難的部分不是避免死鎖,而是允許線程並行運行,同時避免死鎖。另外,您可以在創建之前鎖定線程1,直到線程2完成 – Gir 2012-08-13 16:09:22