5/12の記事の続きです。
先日またHeimdallrの例の不具合が起きたので解析を進めました。
残念ながらまだ原因は確定はできませんでしたが、インターネットアクセス用スレッド処理がスレッドセーフになっていないのにマルチスレッドを使っているのが原因でしょう。
今回の件で思い知りましたが、マルチスレッドアプリケーションのデバッグって大変ですね。不具合が起きても原因がなかなか分かりません。
各スレッドの状況が手に取るように分かるデバッガが欲しいですね・・・。
(Winnyの技術に書いてありましたが)Winny開発者が、マルチスレッドを使わないでWinnyを設計した気持ちが良く分かります。
私も今後はマルチスレッドを使いません、と言いたい所ですが、CPUのトレンドはマルチコア。つまりマルチスレッドに向いているのです。
何時までも避けていられるものではないでしょう。
むしろ、マルチスレッドアプリケーションをまともに設計できるようになるために、今のうちにマルチスレッドの落とし穴に嵌りまくっておいたほうが良さそうですね。
というわけで、これに懲りずに今後も積極的にマルチスレッドを使って行こうかと思っています。
でも辛いなぁ・・・。
投稿者 MASATO : 2006年05月16日 01:40 | トラックバック私も今回はPrintf文相当のものを使いました。でもPrintf文を入れるだけで動作が変わってしまうこともあるので辛いですよね。
わたしもマルチスレッド設計するときに一番最初に実装する部分がDebuglog部分ですね
Delphiの場合には、表に表示できる処理はメインスレッドだけですのでなかなか面倒です。
Print文デバッグのように強引にデバッグしてます。
Posted by: 瞳子 : 2006年05月16日 10:26