Freigeben über


MemoryBarrier-Funktion (winnt.h)

Erstellt eine Hardwarespeicherbarriere (Fence), die verhindert, dass die CPU Lese- und Schreibvorgänge neu anordnet. Es kann auch verhindern, dass der Compiler Lese- und Schreibvorgänge neu anordnet.

Syntax

void MemoryBarrier();

Rückgabewert

Keine

Bemerkungen

Verwenden Sie dieses Makro oder die ineinandergreifenden Funktionen, wenn die Reihenfolge der Lese- und Schreibvorgänge im Arbeitsspeicher für den Programmbetrieb entscheidend ist.

Die systeminternen _ReadBarrier, _WriteBarrier und _ReadWriteBarrier Compiler verhindern nur eine Neuordnung des Compilers. In Visual Studio 2003 werden veränderliche bis flüchtige Verweise sortiert. Der Compiler sortiert den Zugriff auf flüchtige Variablen nicht neu. In Visual Studio 2005 verwendet der Compiler auch Abrufsemantik für Lesevorgänge für flüchtige Variablen und Releasesemantik für Schreibvorgänge für flüchtige Variablen (sofern von der CPU unterstützt). Weitere Informationen finden Sie unter Synchronisierungs- und Multiprozessorprobleme.

Dieses Makro kann auf allen Prozessorplattformen aufgerufen werden, auf denen Windows unterstützt wird, aber es hat keine Auswirkungen auf einige Plattformen. Die Definition variiert von Plattform zu Plattform. Im Folgenden sind einige Definitionen dieses Makros in Winnt.h aufgeführt.


#ifdef _AMD64_
#define MemoryBarrier __faststorefence
#endif

#ifdef _IA64_
#define MemoryBarrier __mf
#endif

// x86

FORCEINLINE
VOID
MemoryBarrier (
    VOID
    )
{
    LONG Barrier;
    __asm {
        xchg Barrier, eax
    }
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile winnt.h (windows.h einschließen)

Weitere Informationen

Ineinandergreifen des Variablenzugriffs