Freigeben über


InterlockedCompareExchange-Funktion (winnt.h)

Führt einen atomaren Vergleichs- und Austauschvorgang für die angegebenen Werte aus. Die Funktion vergleicht zwei angegebene 32-Bit-Werte und tauscht basierend auf dem Ergebnis des Vergleichs mit einem anderen 32-Bit-Wert aus.

Wenn Sie Zeigerwerte austauschen, wurde diese Funktion durch die Funktion InterlockedCompareExchangePointer ersetzt.

Um mit 64-Bit-Werten zu arbeiten, verwenden Sie die Funktion InterlockedCompareExchange64 .

Syntax

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

Parameter

[in, out] Destination

Ein Zeiger auf den Zielwert.

[in] ExChange

Der Tauschwert.

[in] Comperand

Der Wert, der mit Destination verglichen werden soll.

Rückgabewert

Die Funktion gibt den Anfangswert des Zielparameters zurück.

Hinweise

Die Funktion vergleicht den Wert Destination mit dem Comparand-Wert . Wenn der Zielwert gleich dem Comparand-Wert ist, wird der Exchange-Wert in der vom Ziel angegebenen Adresse gespeichert. Andernfalls wird kein Vorgang ausgeführt.

Die Parameter für diese Funktion müssen an einer 32-Bit-Grenze ausgerichtet werden. Andernfalls verhält sich die Funktion auf x86-Multiprozessorsystemen und allen Nicht-x86-Systemen unvorhersehbar. malloc, calloc, HeapAlloc und HeapReAlloc stellen ausreichend abgestimmten Arbeitsspeicher bereit.

Die verriegelten Funktionen bieten einen einfachen Mechanismus zum Synchronisieren des Zugriffs auf eine Variable, die von mehreren Threads gemeinsam genutzt wird. Diese Funktion ist in Bezug auf Aufrufe anderer ineinander verzahnter Funktionen atomar.

Diese Funktion wird nach Möglichkeit mithilfe eines intrinsischen Compilers implementiert. Weitere Informationen finden Sie in der WinBase.h-Headerdatei und _InterlockedCompareExchange.

Diese Funktion generiert eine vollständige Speicherbarriere (oder einen Zaun), um sicherzustellen, dass Speichervorgänge in der richtigen Reihenfolge abgeschlossen werden.

Itanium-basierte Systeme: Verwenden Sie für leistungskritische Anwendungen stattdessen InterlockedCompareExchangeAcquire oder InterlockedCompareExchangeRelease .

Hinweis Diese Funktion wird auf Windows RT-basierten Systemen unterstützt.
 

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile winnt.h (Einschließen von Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Zugriff auf verriegelte Variablen

InterlockedCompare64Exchange128

InterlockedCompareExchange128

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

Synchronisierungsfunktionen