我一直工作在锁树死锁检测算法的一些例子,并一直无法找出死锁在这种特殊情况是如何发生的:锁树算法死锁检测
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