Compilador reordenando em torno de limites mutex?

Suponha que eu tenha minhas próprias funções não embutidas LockMutex e UnlockMutex, que estão usando algum mutex adequado - como impulso - por dentro. Como o compilador saberá não reordenar outras operações com relação às chamadas para o LockMutex e UnlockMutex? Não é possível saber como implementarei essas funções em alguma outra unidade de compilação.

void SomeClass::store(int i)
{
  LockMutex(_m);
  _field = i;  // could the compiler move this around?
  UnlockMutex(_m);
}

ps: É suposto usar instâncias de classes para manter bloqueios para garantir o desbloqueio. Eu deixei isso de fora para simplificar o exemplo.

questionAnswers(5)

yourAnswerToTheQuestion