InterlockedCompareExchange128-Funktion (winnt.h)

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

Um mit 16-Bit-Werten zu arbeiten, verwenden Sie die Funktion InterlockedCompareExchange16 .

Um mit 32-Bit-Werten zu arbeiten, verwenden Sie die Funktion InterlockedCompareExchange .

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

Syntax

BOOLEAN InterlockedCompareExchange128(
  [in, out] LONG64 volatile *Destination,
  [in]      LONG64          ExchangeHigh,
  [in]      LONG64          ExchangeLow,
  [in, out] LONG64          *ComparandResult
);

Parameter

[in, out] Destination

Ein Zeiger auf den Zielwert. Dieser Parameter ist ein Array von zwei 64-Bit-Ganzzahlen, die als 128-Bit-Feld betrachtet werden.

[in] ExchangeHigh

Der hohe Teil des Tauschwerts.

[in] ExchangeLow

Der niedrige Teil des Tauschwerts.

[in, out] ComparandResult

Der Wert, mit dem verglichen werden soll. Dieser Parameter ist ein Array von zwei 64-Bit-Ganzzahlen, die als 128-Bit-Feld betrachtet werden. Bei der Ausgabe wird dies mit dem ursprünglichen Wert des Ziels überschrieben.

Rückgabewert

Die Funktion gibt 1 zurück, wenn ComparandResult dem ursprünglichen Wert des Destination-Parameters entspricht, oder 0, wenn ComparandResult nicht dem ursprünglichen Wert des Zielparameters entspricht.

Hinweise

Die Funktion vergleicht den Wert Destination mit dem ComparandResult-Wert :

  • Wenn der Wert Destination gleich dem ComparandResult-Wert ist, werden die ExchangeHigh - und ExchangeLow-Werte in dem von Destination angegebenen Array und auch in dem von ComparandResult angegebenen Array gespeichert.
  • Andernfalls bleibt das Ziel unverändert.
Unabhängig vom Ergebnis des Vergleichs wird der ursprüngliche Zielwert in dem von ComparandResult angegebenen Array gespeichert.

Die Parameter für diese Funktion müssen an einer 16-Byte-Grenze ausgerichtet werden. andernfalls verhält sich die Funktion auf x64-Systemen unvorhersehbar. Siehe _aligned_malloc.

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 ist nur auf x64-basierten Systemen verfügbar und wird mithilfe eines intrinsischen Compilers implementiert. Weitere Informationen finden Sie in der WinBase.h-Headerdatei und _InterlockedCompareExchange128.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winnt.h (Einschließen von Windows.h)

Weitere Informationen

Zugriff auf verriegelte Variablen

InterlockedCompare64Exchange128

InterlockedCompareExchange

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

Synchronisierungsfunktionen