デッドロック検出グラフの具体例
脳内の整理が大事、とか書いたので、整理しておこう。。
貼り付けた画像のような雰囲気になるのですが、たとえば
- hogeInstance#someMethod()のスレッド : hogeInstance1 -> fugaInstance
- fugaInstance#methodB()のスレッド : fugaInstance -> abc.list
- Abc#run()のスレッド : abc.list -> hogeInstance1
- HogeManager#run()のスレッド : hogeInstance2 -> hogeInstance1
のような処理の流れを見つけたとき
| hogeInstance1 | ---------> | fugaInstance | ↑ ↑ ↓ |hogeInstance2| +----------------| abc.list |
という(テキストだと見にくいので添付画像参照)絵を書く、と。
このとき、矢印をスレッドとか流れごとに色分けしたり識別する必要は、検出のためだけなら必要ないとこもポイント(わかるようにしておくと便利ですが)
グラフにして、矢印をたどっていくと元のとこに戻る…つまり循環するような部分を見つけたらデッドロックの可能性あり。この例では3スレッドの間でdeadlockする、と。