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)

另请参阅

互锁变量访问