複数のアカウントのメールを同時に受信すると POPFile が終了する件 4

id:amatubu:20041020#p1 に書いた件の続き。その前は、id:amatubu:20041018#p2 に書いた件の続き。さらにその前は、id:amatubu:20041015#p2。
Text::Kakasi が同時に呼び出されないように、flock を使って排他処理をしてみたところ、問題なく動くことがわかった。とりあえずこんな方法で解決できそうだ。Windows XP SP2 でしか検証していないが、問題を解決するためのパッチを作成。
しかし、調べていたら flockWindows 9x では使えないらしいという情報が。そうすると、rename を使う方法で書き換えるしかないのかなぁ。複数のプロセスではなくて、複数のスレッドだからなにか他の方法がありそうな気もするけど(threads モジュールを使えばいいというのはわかっているが、これだけの目的のために新たなモジュールが必要になるというのもどうかと思うので、できれば別の方法を考えたい)。問題が起こるのは Windows 環境だけのようだから、Windows 版で動くものであればいいのだけど。ということで、マルチスレッドで動いている場合に、ある部分に同時にアクセスされないように排他処理をするうまい方法を募集中。
Windows 環境でだけ問題が起こるのは、昨日も書いたけれど、たぶん fork の動作が違うからだと思う。Mac OS X で fork を動かすと、子プロセスが作成されるが、Windows ではプロセスではなくてスレッドが作られる。そして、子プロセスであるかのように振る舞うようなのだ。しかし、実際には別のプロセスではなく、マルチスレッドで動いているため、スレッドセーフでないモジュールを呼び出すと問題が起こってしまうのではないかと考えている。
マルチスレッドについて調べてみなくては。