Interlocked* API と File Mapping

仕事で、Windows上でプロセス間通信を書くことになった。

プロセス間の同期にはEventかMutexを使うものだと思っていたんだけど、wikipedia:Mutexを見るとMetered Sectionの方が速いと書いてあった。そんなAPIはないので何だろうと思っていたらMSDNの記事 A Quick and Versatile Synchronization Object にソースが載っていた。眺めてみると、File Mapping した共有メモリにInterlockedExchange などの、wikipedia:メモリバリア付きのatomicメモリ操作を行い、さらにWindowsイベントオブジェクトで待機状態を管理するものだった。

wikipedia:コンペア・アンド・スワップなどの操作を共有メモリ中で普通に実行できるんなら、lock-freeアルゴリズムで書かれたコンテナの類をIPCで普通に使えるのか?と思いきやWindowsのFile Mapping はオープン中にリサイズすることができないようなので、IPCコンテナを作るとしたらそれはファイルシステムに似たような領域管理を行うことになるかもしれない気がした。

ということで Interlocked* API と File Mapping を両方使ってみるテスト。
http://cid-8d91961e6d878ff6.skydrive.live.com/self.aspx/scripts/TestIPCInterlocked.cpp