Condividi tramite


Funzione MemoryBarrier (winnt.h)

Crea una barriera di memoria hardware (recinto) che impedisce alla CPU di riordinare le operazioni di lettura e scrittura. Può anche impedire al compilatore di riordinare le operazioni di lettura e scrittura.

Sintassi

void MemoryBarrier();

Valore restituito

nessuno

Osservazioni

Utilizzare questa macro o le funzioni interlocked quando l'ordine delle operazioni di lettura e scrittura della memoria è fondamentale per l'operazione del programma.

Le funzioni intrinseche del compilatore _ReadBarrier, _WriteBarrier e _ReadWriteBarrier impediscono solo il ordinamento del compilatore. Con Visual Studio 2003, i riferimenti volatili a volatili vengono ordinati; il compilatore non riordina l'accesso alle variabili volatili . Con Visual Studio 2005, il compilatore usa anche la semantica di acquisizione per le operazioni di lettura su variabili volatili e semantica di rilascio per le operazioni di scrittura su variabili volatili (se supportate dalla CPU). Per altre informazioni, vedere Problemi di sincronizzazione e multiprocessore.

Questa macro può essere chiamata su tutte le piattaforme del processore in cui è supportato Windows, ma non ha alcun effetto su alcune piattaforme. La definizione varia dalla piattaforma alla piattaforma. Di seguito sono riportate alcune definizioni di questa macro in 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
    }
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione winnt.h (include Windows.h)

Vedi anche

Accesso a variabili interlocked