排他制御

さらに少し調べてみたがやっぱりよくわからない。

  • new POPFile::Mutexが2度以上実行されてしまうのだがこれはまずいのでは。現在のmkdir版はnewの中でrmdirを発行しており小さいが穴があることになる。Semaphore版はnewで新しいsemaphoreを割り当てる(普通の?)実装を採用すれば大穴が空くことになる。
  • Windows2000SP4のマシンでsemaphore(固定semaphore使用)版を試してみるが簡単にクラッシュしてしまう。Thread::Semaphoreの実装を拾ってきて追いかけて見るとあるスレッドでdown関数の最初のlock()でエラーになっているのではないか(直後のステータスが-1なので)と思われる。lockがエラーになるってどういうこと?不慣れなperlではこれ以上は無理か。
  • 自宅のWindowsXP SP2のマシンで同様のテストをするがクラッシュは発生しない。