Freigeben über


InterlockedCompareExchange-Funktion (wdm.h)

Die InterlockedCompareExchange Routine führt einen atomischen Vorgang aus, der den Eingabewert vergleicht, auf den Destination mit dem Wert von Comperandverweist.

Syntax

LONG CDECL_NON_WVMPURE InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
  [in]      LONG          ExChange,
  [in]      LONG          Comperand
);

Parameter

[in, out] Destination

Ein Zeiger auf den Eingabewert, der mit dem Wert von Comperandverglichen wird.

[in] ExChange

Gibt den Ausgabewert an, auf den Destination verweist, wenn der eingabewert, auf den Destination verweist, dem Wert von Comperandentspricht.

[in] Comperand

Gibt den Wert an, der mit dem Eingabewert verglichen wird, auf den durch Destinationverwiesen wird.

Rückgabewert

InterlockedCompareExchange gibt den ursprünglichen Wert von *Destinationzurück.

Bemerkungen

Wenn Comperand gleich *Destinationist, wird *Ziel- auf den Wert Exchange-festgelegt. Andernfalls ist *Ziel- unverändert.

InterlockedCompareExchange bietet eine schnelle, atomare Möglichkeit, das Testen und Aktualisieren einer Variablen zu synchronisieren, die von mehreren Threads gemeinsam genutzt wird. Wenn der von Destination hervorgehobene Eingabewert dem Wert Comperandentspricht, wird der Ausgabewert Ziel- auf den Wert Exchange-festgelegt.

InterlockedCompareExchange ist für Geschwindigkeit ausgelegt und wird in der Regel von einem Compiler inline implementiert. InterlockedCompareExchange ist nur in Bezug auf andere InterlockedXxx Aufrufe atomar. Es verwendet keine Drehsperre und kann auf seitenfähigen Daten sicher verwendet werden.

Interlocked-Vorgänge können nicht für nicht zwischengespeicherten Arbeitsspeicher verwendet werden.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
Library OneCoreUAP.lib unter Windows 10
IRQL- Beliebige Ebene

Siehe auch

ExInterlockedCompareExchange64-

InterlockedCompareExchangePointer

InterlockedDecrement-

InterlockedExchange-

InterlockedExchangePointer-

InterlockedIncrement-