原因判明2008年02月28日 23時33分26秒

昨日の不具合の原因がわかりました。 わかってみれば実に単純なことでした。

  • メインスレッドとサブスレッドの同期をとるため、メインスレッドはサブスレッドを待つループに入ります。
  • サブスレッドの処理が終わるとフラグを変更します。メインスレッドはそのフラグを見てループを終了し、次の処理に移ります。
  • ただしサブスレッドで例外が発生するとフラグの変更が実行されないままサブスレッドが終了してしまいます。メインスレッドはもう発生することのないフラグの変更を待ち続けてループし続けるため、ゾンビ化となる。

本当に単純なことですが、マルチスレッドが絡むととたんに複雑になってしまうものです。