memoryBarrier 函数 (winnt.h)
创建硬件内存屏障 (围栏) ,以防止 CPU 对读取和写入操作进行重新排序。 它还可能会阻止编译器对读取和写入操作进行重新排序。
语法
void MemoryBarrier();
返回值
无
备注
当内存读取和写入操作的顺序对程序操作至关重要时,请使用此宏或互锁函数。
_ReadBarrier、_WriteBarrier 和 _ReadWriteBarrier 编译器内部函数仅阻止编译器重新排序。 在 Visual Studio 2003 中, 可变 到 易失性 引用是有序的;编译器不会对 可变 变量访问重新排序。 在 Visual Studio 2005 中,编译器还使用获取语义对 易失变量 执行读取操作,并使用释放语义对 可变 变量 (的写入操作(如果受 CPU) 支持)。 有关详细信息,请参阅 同步和多处理器问题。
可以在支持 Windows 的所有处理器平台上调用此宏,但它对某些平台没有影响。 定义因平台而异。 以下是 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
}
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winnt.h (包括 Windows.h) |