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) |