デッドロック

最近、WaitForSingleObject、WaitForMultipleObjectを使いまくっている。MutexやEventを使うことも増えた。

半年ほど前から、マルチスレッドのプログラムを扱う機会が増えた。マルチスレッドといえば、やはりデッドロックだと思う。

マルチスレッドを使ってパフォーマンスを向上させようとする傍らで、どうしてもスレッド間で同期を取る必要が出てくる。同期を取る部分では、コードブロックの保護が必要になる。保護をおろそかにするとアクセス違反や意図せぬ動作が発生する可能性が高まり、うかつに保護するとデッドロックが起こる。

また、マルチスレッドを扱う目的上、大量の情報を扱うことが多く、デバッグも難しくなる。大量の情報を扱うだけでも結構大変なのに。そうした中で、自分の書いたコードが、どこでデッドロックしているのか分からない、という状況になると大変だ。しかも、それがネットワークアプリケーションだったりしたらもっと大変だ。

というわけで、この足りない脳みそを補ってくれるナイスなデバッグツールはないものかを探してメモしていこうと思います。あー、そういえばApacheソースコードとかって、結構参考になりそうですね。