_InterlockedCompareExchangePointer systeminternen Funktionen

Microsoft-spezifisch

Führt einen atomarischen Vorgang durch, bei dem die Exchange-Adresse in der Destination-Adresse gespeichert wird, wenn die Comparand- und die Destination-Adresse gleich sind.

Syntax

void * _InterlockedCompareExchangePointer (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);
void * _InterlockedCompareExchangePointer_acq (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);
void * _InterlockedCompareExchangePointer_HLEAcquire (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);
void * _InterlockedCompareExchangePointer_HLERelease (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);
void * _InterlockedCompareExchangePointer_nf (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);
void * _InterlockedCompareExchangePointer_np (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);
void * _InterlockedCompareExchangePointer_rel (
   void * volatile * Destination,
   void * Exchange,
   void * Comparand
);

Parameter

Ziel
[in, out] Zeigen Sie auf einen Zeiger auf den Zielwert. Das Zeichen wird ignoriert.

Exchange
[in] Exchange-Zeiger. Das Zeichen wird ignoriert.

Comparand
[in] Zeiger, der mit dem Ziel verglichen werden soll. Das Zeichen wird ignoriert.

Rückgabewert

Der Rückgabewert ist der Anfangswert des Ziels.

Anforderungen

Intrinsic Aufbau Header
_InterlockedCompareExchangePointer x86, ARM, x64, ARM64 <intrin.h>
_InterlockedCompareExchangePointer_acq, _InterlockedCompareExchangePointer_nf, _InterlockedCompareExchangePointer_rel ARM, ARM64 <iiintrin.h>
_InterlockedCompareExchangePointer_HLEAcquire, _InterlockedCompareExchangePointer_HLERelease x86, x64 <immintrin.h>

Hinweise

_InterlockedCompareExchangePointer führt einen atomarischen Vergleich der Destination-Adresse mit der Comparand-Adresse durch. Wenn die Destination-Adresse der Comparand-Adresse entspricht, wird die Exchange-Adresse an der durch Destination definierten Adresse gespeichert. Andernfalls wird kein Vorgang ausgeführt.

_InterlockedCompareExchangePointer stellt systeminterne Compilerunterstützung für die Win32 Windows SDK InterlockedCompareExchangePointer-Funktion bereit.

Ein Beispiel für die Verwendung _InterlockedCompareExchangePointerfinden Sie unter _InterlockedDecrement.

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. ARM-Systeminterne mit einem _nf Suffix ("kein Zaun") wirken nicht als Speicherbarriere.

Die systeminternen Funktionen mit dem Suffix _np („no prefetch“) verhindern, dass ein möglicher Vorabrufvorgang vom Compiler eingefügt wird.

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.

Ende Microsoft-spezifisch

Siehe auch

Systeminterne Compiler
Schlüsselwörter