Función MemoryBarrier (winnt.h)
Crea una barrera de memoria de hardware (barrera) que impide que la CPU vuelva a ordenar las operaciones de lectura y escritura. También puede impedir que el compilador vuelva a ordenar las operaciones de lectura y escritura.
Sintaxis
void MemoryBarrier();
Valor devuelto
None
Observaciones
Use esta macro o las funciones interbloqueadas cuando el orden de las operaciones de lectura y escritura de memoria sea fundamental para la operación del programa.
Los _ReadBarrier, _WriteBarrier y _ReadWriteBarrier intrínsecos del compilador impiden que el compilador vuelva a ordenarlo. Con Visual Studio 2003, se ordenan las referencias volátiles a volátiles ; el compilador no volverá a ordenar el acceso a variables volátiles . Con Visual Studio 2005, el compilador también usa la semántica de adquisición para las operaciones de lectura en variables volátiles y semántica de versión para las operaciones de escritura en variables volátiles (cuando sea compatible con la CPU). Para obtener más información, vea Problemas de sincronización y multiprocesador.
Se puede llamar a esta macro en todas las plataformas de procesador en las que se admite Windows, pero no tiene ningún efecto en algunas plataformas. La definición varía de plataforma a plataforma. A continuación se muestran algunas definiciones de esta macro en 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 | Value |
---|---|
Cliente mínimo compatible | Windows Vista [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | winnt.h (incluye Windows.h) |