Compartir a través de


Función InterlockedCompareExchange

Compara la entrada con el valor de comparación e intercambia el resultado de forma atómica.

Sintaxis

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

Parámetros

dest [in]

Tipo: UINT

Dirección de destino.

compare_value [in]

Tipo: UINT

Valor de comparación.

value [in]

Tipo: UINT

Valor de entrada.

original_value [out]

Tipo: UINT

El valor original.

Valor devuelto

Esta función no devuelve ningún valor.

Observaciones

Compara de forma atómica el valor dest a compare_value, almacena el valor en dest si los valores coinciden, devuelve el valor original dest en original_value. Esta operación solo se puede realizar en recursos con tipo int o uint y en variables de memoria compartidas. Hay tres posibles usos para esta función. La primera es cuando R es un tipo de variable de memoria compartida. En este caso, la función realiza la operación en el registro de memoria compartida al que hace referencia dest. El segundo escenario es cuando R es un tipo de variable de recurso. En este escenario, la función realiza la operación en la ubicación del recurso a la que hace referencia dest. Por último, el tercer escenario es cuando R es un tipo de variable local. En este escenario, la función se reduce a la operación realizada mediante operaciones locales. Esta operación solo está disponible cuando R es legible y grabable.

Nota

Si llama a InterlockedCompareExchange en un bucle for o while compute shader, para compilar correctamente, debe usar el atributo [allow_uav_condition] en ese bucle.

 

Esta función se admite en los siguientes tipos de sombreadores:

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

 

Consulte también

RWByteAddressBuffer

Modelo de sombreador 5