Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft-spezifisch
Bereitstellen der systeminternen Compilerunterstützung für die Funktion Win32 Windows SDK _InterlockedExchangeAdd systeminterne Funktionen .
Syntax
long _InterlockedExchangeAdd(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_acq(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_rel(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_nf(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLEAcquire(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLERelease(
long volatile * Addend,
long Value
);
char _InterlockedExchangeAdd8(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_acq(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_rel(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_nf(
char volatile * Addend,
char Value
);
short _InterlockedExchangeAdd16(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_acq(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_rel(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_nf(
short volatile * Addend,
short Value
);
__int64 _InterlockedExchangeAdd64(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_acq(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_rel(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_nf(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLEAcquire(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLERelease(
__int64 volatile * Addend,
__int64 Value
);
Parameter
Summand
[in, out] Der zu addierende Wert; durch das Ergebnis des Zusatzs ersetzt.
Wert
[in] Der hinzuzufügende Wert.
Rückgabewert
Der Rückgabewert ist der Anfangswert der Variablen, auf die der Addend-Parameter zeigt.
Anforderungen
| Intrinsic | Aufbau | Header |
|---|---|---|
_InterlockedExchangeAdd, _InterlockedExchangeAdd8_InterlockedExchangeAdd16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_acq, _InterlockedExchangeAdd_rel, , _InterlockedExchangeAdd_nf, _InterlockedExchangeAdd8_acq, _InterlockedExchangeAdd8_nf_InterlockedExchangeAdd8_rel, _InterlockedExchangeAdd16_acq, _InterlockedExchangeAdd16_rel, , _InterlockedExchangeAdd16_nf, _InterlockedExchangeAdd64_acq, , _InterlockedExchangeAdd64_rel_InterlockedExchangeAdd64_nf |
ARM, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_HLEAcquire, _InterlockedExchangeAdd_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchangeAdd64_HLEAcquire, _InterlockedExchangeAdd64_HLErelease |
x64 | <immintrin.h> |
Hinweise
Es gibt mehrere Varianten von _InterlockedExchangeAdd, die sich basierend auf den beinhalteten Datentypen und in Abhängigkeit davon unterscheiden, ob prozessorspezifische Semantiken zum Abrufen bzw. Freigeben verwendet werden.
Die _InterlockedExchangeAdd-Funktion funktioniert mit ganzzahligen 32-Bit-Werten, _InterlockedExchangeAdd8 funktioniert mit ganzzahligen 8-Bit-Werten, _InterlockedExchangeAdd16 funktioniert mit ganzzahligen 16-Bit-Werten, und _InterlockedExchangeAdd64 funktioniert mit ganzzahligen 64-Bit-Werten.
Verwenden Sie auf ARM-Plattformen die systeminternen Funktionen mit den Suffixen _acq und _rel, wenn Sie Semantiken zum Abrufen bzw. Freigeben benötigen, wie am Anfang und 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 Elemente auf Plattformen aufgerufen werden, die HLE nicht unterstützen, wird der Hinweis ignoriert.
Diese Routinen sind nur als systeminterne Funktionen verfügbar. Sie sind auch dann systemintern, wenn /Oi oder #pragma systemintern verwendet wird. Es ist nicht möglich, #pragma Funktion für diese systeminternen Funktionen zu verwenden.
Beispiel
Ein Beispiel für die Verwendung _InterlockedExchangeAddfinden Sie unter _InterlockedDecrement.
Ende Microsoft-spezifisch
Siehe auch
Intrinsische Compilerfunktionen
Schlüsselwörter
Konflikt mit dem x86-Compiler