独自の非インライン関数LockMutexとUnlockMutexがあり、これらは内部でブーストなどの適切なミューテックスを使用しているとします。LockMutexおよびUnlockMutexの呼び出しに関して、コンパイラーは他の操作を並べ替えないことをどのように知るのでしょうか。これらの関数を他のコンパイルユニットにどのように実装するかは、おそらくわかりません。
void SomeClass::store(int i)
{
LockMutex(_m);
_field = i; // could the compiler move this around?
UnlockMutex(_m);
}
ps:ロックを解除するために、クラスのインスタンスを使用してロックを保持することになっています。例を簡略化するために、これは省略しました。