デッドロックの見つけ方

tanigon2005-07-23

会社の同僚とデッドロックの原因、個所を追いかけるときに、同僚がササッと書いたやつが非常に役立った。いわゆる教科書的方法なんだけど、やっぱりこういうのを脳内の道具箱からサッと出せることが必要なんだな…。手法自体の新しさよりも道具箱の洗練が必要か。

で、その手法、ほんとに「当たり前じゃん!」って言われるような方法なんですが、とりあえず関係ありそうな処理のスタートポイントを並べて、
それぞれの処理をstep-by-stepで追いかけながら、ロックしているモノをロックしている順番ごとに矢印でつないでかいていく。

処理A1 : Bのインスタンス -> Cのインスタンス -> Dのlist
処理A2 : Cのインスタンス -> Dのlist
処理A3 : Dのlist -> Bのインスタンス...

こうしておくと、処理A1とA3がデッドロックの可能性があることが一目瞭然、というわけです。実際には、グラフを書いて、循環している部分はダメという検出をすれば、3者以上のdeadlockも簡単に検出できます。

なんか、グラフ理論の応用例らしいですよ。もっと体系だったアカデミックな方法もあるのかな。

うーん、こういうのって原始的というか古典的というか基本ノウハウなんだろうけど、いざという時にパッと出てきて使えないと意味ないな。脳内の整理をしておかないと。。。