Windows版開発中 その2

SyncList, SyncQueue, WorkPool, Mergerについてサンプルで動作を確認。

途中、なんだか知らないけど時々実行終了時にWindowsが不正終了?を知らせるというバグに悩まされる。これは、_exit()が解放しようとしたメモリが子プロセスからはアクセスできなかったというもの。ExitProcess()に変更してもダメで、結局ネイティブAPIのZwTerminateProcessを呼び出すことで解決。
そういえば、不正終了時に「Microsoftに知らせますか」云々のメッセージが出るけど、そこに示してあるファイルにクラッシュダンプがあるのね。デバッガで開くと、落ちた所までのコールツリーが見えるので便利。ってWindowsで開発している人には常識なんだろうなぁ。

ちょっと微妙な仕様として、UNIX版だとpards_finalize()で子プロセスが終了するのを待っていたんだけど、Windows版だと待っていない。
というか、Windowsにはwaitが無いので待てないという。どうしようかなぁ。

ついでに、SPMDサポートも同様の問題がある(SPMD終了時に子プロセスの終了を待つ)。ん〜、どうにかしないと駄目か。

N-Queenも試して、とりあえず2CPUで速くなることを確認。bzip2で試したいんだけど、ちょっと手間がかかるかな。Windowsコンパイルするところからだし。

とりあえず、懸案が進んで有意義な連休でした(^^