MemoryBarrier, fonction (winnt.h)
Crée une barrière de mémoire matérielle (clôture) qui empêche le processeur de réorganiser les opérations de lecture et d’écriture. Cela peut également empêcher le compilateur de réorganiser les opérations de lecture et d’écriture.
Syntaxe
void MemoryBarrier();
Valeur de retour
None
Remarques
Utilisez cette macro ou les fonctions verrouillées lorsque l’ordre des opérations de lecture et d’écriture de mémoire est critique pour le fonctionnement du programme.
Les _ReadBarrier, les _WriteBarrier et les intrinsèques du compilateur _ReadWriteBarrier empêchent uniquement la réorganisation du compilateur. Avec Visual Studio 2003, les références volatiles à volatiles sont classées ; le compilateur ne réinscrira pas l’accès aux variables volatiles . Avec Visual Studio 2005, le compilateur utilise également la sémantique d’acquisition pour les opérations de lecture sur les variables volatiles et la sémantique de mise en production pour les opérations d’écriture sur les variables volatiles (lorsqu’elles sont prises en charge par le processeur). Pour plus d’informations, consultez Problèmes de synchronisation et de multiprocesseur.
Cette macro peut être appelée sur toutes les plateformes de processeur pour lesquelles Windows est pris en charge, mais elle n’a aucun effet sur certaines plateformes. La définition varie d’une plateforme à l’autre. Voici quelques définitions de cette macro dans 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
}
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | winnt.h (inclure Windows.h) |