今回の出張。PC側のプログラムはオレとは別の人が担当だったのだが、VC++6.0でビルドしたプログラムが単体で動かすと「ランタイムエラー」が頻発する謎に悩まされていた。VC++6.0上のIDE上で動かすとなんとも無いのに、単体だとDebugビルドでもReleaseビルドでもかなりの確立でエラーが出る始末。
会社での開発マシンではなんとも無かった。見ると実機マシンのCPUはPentiumDでパフォーマンスモニタを見てもちゃんとCPUコアが二つ見えている。聞けばプログラムはマルチスレッド。という事はなにもせずともプロセス内で複数コアに処理が分散される状態。…これが原因か?
…で、結果的に担当者が自力で解決したのだが、スレッド内で開始時のリソースの確保をやることを止めて、スレッドを起動する前にメインスレッドで全リソースを確保してからスレッドに分散させたら綺麗サッパリ直ったとの事。要するにリソース確保で複数コアの競合が起こって、それにランタイム側が対応してなかった訳ね…。
最新のVS2005に使ってる.net FrameWork2.0辺りなら多分大丈夫なんだろうけど、昔書いたプログラムはデュアルコアCPUだと動かないパターンがある(しかも高速になればなるほどその確率は上がる)って例があるって事で。