Freigeben über


InterlockedCompareExchange-Funktion

Vergleicht die Eingabe mit dem Vergleichswert und tauscht das Ergebnis atomar aus.

Syntax

void InterlockedCompareExchange(
  in  UINT dest,
  in  UINT compare_value,
  in  UINT value,
  out UINT original_value
);

Parameter

dest [in]

Typ: UINT

Die Zieladresse.

compare_value [in]

Typ: UINT

Der Vergleichswert.

Wert [in]

Typ: UINT

Der Eingabewert.

original_value [out]

Typ: UINT

Der ursprüngliche Wert.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Bemerkungen

Vergleicht den Wert in dest atomar mit compare_value, speichert den Wert in dest , wenn die Werte übereinstimmen, und gibt den ursprünglichen Wert von dest in original_value zurück. Dieser Vorgang kann nur für int - oder uint-typisierte Ressourcen und freigegebene Arbeitsspeichervariablen ausgeführt werden. Es gibt drei mögliche Verwendungsmöglichkeiten für diese Funktion. Die erste ist, wenn R ein Variablentyp mit freigegebenem Speicher ist. In diesem Fall führt die Funktion den Vorgang für das freigegebene Speicherregister aus, auf das von dest verwiesen wird. Das zweite Szenario ist, wenn R ein Ressourcenvariablentyp ist. In diesem Szenario führt die Funktion den Vorgang für den Ressourcenspeicherort aus, auf den von dest verwiesen wird. Schließlich ist das dritte Szenario, wenn R ein lokaler Variablentyp ist. In diesem Szenario reduziert sich die Funktion auf den Vorgang, der mit lokalen Vorgängen ausgeführt wird. Dieser Vorgang ist nur verfügbar, wenn R lesbar und schreibbar ist.

Hinweis

Wenn Sie InterlockedCompareExchange in einer for - oder while-Compute-Shaderschleife aufrufen, müssen Sie für die ordnungsgemäße Kompilierung das [allow_uav_condition]- Attribut für diese Schleife verwenden.

 

Diese Funktion wird in den folgenden Shadertypen unterstützt:

VS HS DS GS PS CS
x x x x x x

 

Siehe auch

RWByteAddressBuffer

Shadermodell 5