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.