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 を含む)

こちらもご覧ください

インタロックされた変数アクセス