memoryBarrier 函式 (winnt.h)

建立硬體記憶體屏障 (柵欄) ,以防止 CPU 重新排序讀取和寫入作業。 它也可能防止編譯程式重新排序讀取和寫入作業。

Syntax

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)

另請參閱

相互鎖定的變數存取