Share via


Função MemoryBarrier (winnt.h)

Cria uma barreira de memória de hardware (cerca) que impede que a CPU reordene as operações de leitura e gravação. Ele também pode impedir que o compilador reordene as operações de leitura e gravação.

Sintaxe

void MemoryBarrier();

Retornar valor

Nenhum

Comentários

Use essa macro ou as funções interligadas quando a ordem das operações de leitura e gravação de memória for essencial para a operação do programa.

Os intrínsecos do compilador _ReadBarrier, _WriteBarrier e _ReadWriteBarrier impedem apenas a reordenação do compilador. Com o Visual Studio 2003, as referências voláteis a voláteis são ordenadas; o compilador não ordenará novamente o acesso à variável volátil . Com o Visual Studio 2005, o compilador também usa semântica de aquisição para operações de leitura em variáveis voláteis e semântica de versão para operações de gravação em variáveis voláteis (quando compatível com a CPU). Para obter mais informações, consulte Problemas de sincronização e multiprocessador.

Essa macro pode ser chamada em todas as plataformas de processador em que o Windows tem suporte, mas não tem efeito em algumas plataformas. A definição varia de plataforma para plataforma. Veja a seguir algumas definições dessa macro em Winnt.h.


#ifdef _AMD64_
#define MemoryBarrier __faststorefence
#endif

#ifdef _IA64_
#define MemoryBarrier __mf
#endif

// x86

FORCEINLINE
VOID
MemoryBarrier (
    VOID
    )
{
    LONG Barrier;
    __asm {
        xchg Barrier, eax
    }
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho winnt.h (inclua Windows.h)

Confira também

Acesso a variáveis interligadas