同期API

QueueUserAPCだのRegisterWaitForSingleObjectだのって、実は理解すればとても使える仕組みなんじゃなかろうか、と思うこの頃。(理解できない)
TMultiReadExclusiveWriteSynchronizerのTryBeginWriteがあるバージョンが必要で、今まではクリティカルセクションで実装していたのですけども、読み込みスレッドが同時に突入しようとしたらクリティカルセクションでは一瞬とはいえ不要な同期が起きてしまうわけで、Interlockedなんちゃら使用バージョン*1に書き換え中にこれらのAPIを見つけたわけです。
あとAPIにはInterlockedな単方向リスト(というかスタック)も存在します。ついでにキューも欲しかった。
…作るか?
なんて、どんどん元々書きたかったものから外れていく土曜の昼下がり。

結局のところ、InterlockedCompareExchangeがあれば割と何でもlock-freeにはできるっぽい。wait-freeは工夫が必要で無理なもんは無理と。

*1:SysUtilsのTMultiReadExclusiveWriteSynchronizerは元々こっちの実装