状況が実際のデッドロックである場合(つまり、2つのスレッドが2つの異なるロックを保持しているが、少なくとも1つのスレッドが他のスレッドが保持するロックを望んでいる場合)、まずスレッドがロックを順序付ける方法に関するすべての先入観を放棄する必要があります。何も想定しない。あなたが見ているコードからすべてのコメントを削除したいと思うかもしれません。それらのコメントはあなたに当てはまらない何かを信じさせるかもしれないからです。これを十分に強調することは困難です。何も仮定しないでください。
その後、スレッドが他の何かをロックしようとする間に保持されるロックを決定します。可能であれば、スレッドがロックとは逆の順序でロック解除されるようにします。さらに良いことに、スレッドが一度に1つのロックのみを保持するようにしてください。
スレッドの実行を綿密に処理し、すべてのロックイベントを調べます。各ロックで、スレッドが他のロックを保持しているかどうかを確認し、保持している場合、どのような状況で、同様の実行パスを実行する別のスレッドが考慮中のロックイベントに到達できるかを決定します。
時間やお金がなくなる前に問題を見つけられない可能性は確かにあります。