_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 Targetverwiesen 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 _InterlockedExchangefinden Sie unter _InterlockedDecrement.

Ende Microsoft-spezifisch

Siehe auch

Systeminterne Compiler
Schlüsselwörter
Konflikt mit dem x86-Compiler