我一直在研究锁树死锁检测算法的一些示例,但无法弄清楚在这种特殊情况下死锁是如何发生的:
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:E - D,因为线程以相反的顺序获取这些锁?
我怎么能建议插入一个锁和一个解锁语句来消除死锁?