メモリバリアを理解するために必要な3つのことを読んでいてふと思い出した。確かInterlockedIncrementというのがWindows API関数であったな。これはlong変数を引数にとり、マルチスレッド環境でも確実に+1にする関数である。InterlockedDecrementは-1する関数である。
ここまでは知っていたのだがMSDNライブラリを見るとInterlockedXXX関数というのはいっぱいある。
- InterlockedCompareExchange
- InterlockedCompareExchangePointer
- InterlockedExchange
- InterlockedExchangeAdd
- InterlockedExchangePointer
どれも行う処理が不可分(atomic)であることを保証している。
InterlockedCompareExchangeとかはCAS命令を使っているのだろうか。でもそんな古いCPUからCAS命令というのはあったのだろうかね??