ロック ツリーのデッドロック検出アルゴリズムのいくつかの例に取り組んできましたが、この特定の状況でデッドロックがどのように発生するかを理解できませんでした。
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 でデッドロックが発生する可能性があります。これは、スレッドがこれらのロックを逆の順序で取得するためでしょうか?
デッドロックを取り除くために、1 つの lock ステートメントと 1 つの unlock ステートメントを挿入することをどのように提案できますか?