_InterlockedExchange systeminternen Funktionen
Microsoft-spezifisch
Generiert eine atomare Anweisung, um einen angegebenen Wert festzulegen.
Syntax
long _InterlockedExchange(
long volatile * Target,
long Value
);
long _InterlockedExchange_acq(
long volatile * Target,
long Value
);
long _InterlockedExchange_HLEAcquire(
long volatile * Target,
long Value
);
long _InterlockedExchange_HLERelease(
long volatile * Target,
long Value
);
long _InterlockedExchange_nf(
long volatile * Target,
long Value
);
long _InterlockedExchange_rel(
long volatile * Target,
long Value
);
char _InterlockedExchange8(
char volatile * Target,
char Value
);
char _InterlockedExchange8_acq(
char volatile * Target,
char Value
);
char _InterlockedExchange8_nf(
char volatile * Target,
char Value
);
char _InterlockedExchange8_rel(
char volatile * Target,
char Value
);
short _InterlockedExchange16(
short volatile * Target,
short Value
);
short _InterlockedExchange16_acq(
short volatile * Target,
short Value
);
short _InterlockedExchange16_nf(
short volatile * Target,
short Value
);
short _InterlockedExchange16_rel(
short volatile * Target,
short Value
);
__int64 _InterlockedExchange64(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_acq(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_HLEAcquire(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_HLERelease(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_nf(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_rel(
__int64 volatile * Target,
__int64 Value
);
Parameter
Ziel
[in, out] Zeiger auf den Wert, der ausgetauscht werden soll. Die Funktion legt diese Variable auf Value
fest und gibt ihren vorherigen Wert zurück.
Wert
[in] Wert, der mit dem wert ausgetauscht werden soll, auf den Target
verwiesen wird.
Rückgabewert
Gibt den Anfangswert zurück, auf den von Target
gezeigt wird.
Anforderungen
Intrinsic | Aufbau | Header |
---|---|---|
_InterlockedExchange , _InterlockedExchange8 _InterlockedExchange16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchange64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchange_acq , _InterlockedExchange_nf , , _InterlockedExchange_rel , _InterlockedExchange8_acq , _InterlockedExchange8_rel _InterlockedExchange8_nf , _InterlockedExchange16_acq , , _InterlockedExchange16_nf , _InterlockedExchange16_rel , , _InterlockedExchange64_acq _InterlockedExchange64_nf , , _InterlockedExchange64_rel |
ARM, ARM64 | <intrin.h> |
_InterlockedExchange_HLEAcquire , _InterlockedExchange_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchange64_HLEAcquire , _InterlockedExchange64_HLERelease |
x64 | <immintrin.h> |
Hinweise
_InterlockedExchange
stellt die systeminterne Compilerunterstützung für die Win32 Windows SDK InterlockedExchange-Funktion bereit.
Es gibt mehrere Varianten von _InterlockedExchange
, die sich basierend auf den beinhalteten Datentypen und in Abhängigkeit davon unterscheiden, ob prozessorspezifische Semantiken zum Abrufen bzw. Freigeben verwendet werden.
Die _InterlockedExchange
-Funktion funktioniert mit ganzzahligen 32-Bit-Werten, _InterlockedExchange8
funktioniert mit ganzzahligen 8-Bit-Werten, _InterlockedExchange16
funktioniert mit ganzzahligen 16-Bit-Werten, und _InterlockedExchange64
funktioniert mit ganzzahligen 64-Bit-Werten.
Verwenden Sie auf ARM-Plattformen die systeminternen Funktionen mit den Suffixen _acq
und _rel
für Semantiken zum Abrufen bzw. Freigeben, z. B. am Beginn und am Ende eines kritischen Abschnitts. Die Systeminternen mit einem _nf
Suffix ("kein Zaun") wirken nicht als Speicherbarriere.
Auf Intel-Plattformen, die Hardware Lock Elision (HLE)-Anweisungen unterstützen, enthalten die systeminternen Funktionen mit den Suffixen _HLEAcquire
und _HLERelease
einen Hinweis für den Prozessor, wie die Leistung durch den Wegfall der Schreibsperre in der Hardware beschleunigt werden kann. Wenn diese systeminternen Funktionen auf Plattformen aufgerufen werden, die HLE nicht unterstützen, wird der Hinweis ignoriert.
Diese Routinen sind nur als systeminterne Funktionen verfügbar.
Beispiel
Ein Beispiel für die Verwendung _InterlockedExchange
finden Sie unter _InterlockedDecrement.
Ende Microsoft-spezifisch
Siehe auch
Systeminterne Compiler
Schlüsselwörter
Konflikt mit dem x86-Compiler