t-arakiの日記

並列プログラム用ライブラリPARDSの開発日記など

2008-05-04

[] Windows版開発中 00:25  Windows版開発中を含むブックマーク

PARDSのWindows版、半年前位にできそうかな、という感触までつかんでいたんだけど、再開。

連休中にコーディングして、簡単なサンプルが動くところまではこぎつけた。

まぁ、原理的にUNIX版のサブセットにしかできないんだけど(シグナルが使えないとかで)。

途中、ロックの論理的なミスで動かないバグがあったんだが、ネイティブAPIでフォークしたからセマフォが正しく動いていないのかなぁとか見当違いのところを突っつき回してすげー苦労した。まぁ勉強になったからいいといえばいいんだが。

Windowsセマフォは、ハンドルをオープンしているプロセスが全部終了すると、カーネルから削除される仕様になっている(UNIXのは、明示的に消去しないと消えない)。それはそれでいいんだけど、セマフォを作って、その名前だけを他のプロセスに渡し、そのまま作成したプロセスが終了したりすると、せっかく作ったセマフォが使われる前に消えてしまったりする。というのを避けるために、セマフォを作ったら、専用に作ったプロセスにそのセマフォをオープンしっぱなしにしてもらうことにした。ちとダサいがまぁいいだろう。

前にも書いたけど、fork()はネイティブAPIで実現。Win32サブシステムへの接続は結局できなかったので、SPAWNした関数からは、Win32 APIの呼び出しは制限される。ちょっと試した感じだと、ファイルI/O位はまぁ動いているみたい。標準入出力は駄目。普通のプロセス生成やスレッド生成も駄目だろうなぁ。