Función InterlockedCompareExchange (winnt.h)
Realiza una operación atómica de comparación e intercambio en los valores especificados. La función compara dos valores de 32 bits especificados e intercambia con otro valor de 32 bits en función del resultado de la comparación.
Si va a intercambiar valores de puntero, esta función se ha reemplazado por la función InterlockedCompareExchangePointer .
Para funcionar en valores de 64 bits, use la función InterlockedCompareExchange64 .
Sintaxis
LONG InterlockedCompareExchange(
[in, out] LONG volatile *Destination,
[in] LONG ExChange,
[in] LONG Comperand
);
Parámetros
[in, out] Destination
Puntero al valor de destino.
[in] ExChange
Valor de intercambio.
[in] Comperand
Valor que se va a comparar con Destination.
Valor devuelto
La función devuelve el valor inicial del parámetro Destination .
Comentarios
La función compara el valor De destino con el valor Comparand . Si el valor De destino es igual al valor Comparand , el valor de Exchange se almacena en la dirección especificada por Destination. De lo contrario, no se realiza ninguna operación.
Los parámetros de esta función deben alinearse en un límite de 32 bits; de lo contrario, la función se comportará de forma impredecible en sistemas x86 multiprocesador y en cualquier sistema que no sea x86. malloc, calloc, HeapAlloc y HeapReAlloc proporcionan memoria suficientemente alineada.
Las funciones interbloqueadas proporcionan un mecanismo sencillo para sincronizar el acceso a una variable compartida por varios subprocesos. Esta función es atómica con respecto a las llamadas a otras funciones interbloqueadas.
Esta función se implementa mediante un intrínseco del compilador siempre que sea posible. Para obtener más información, vea el archivo de encabezado WinBase.h y _InterlockedCompareExchange.
Esta función genera una barrera de memoria completa (o cerca) para asegurarse de que las operaciones de memoria se completan en orden.
Sistemas basados en Itanium: En el caso de las aplicaciones críticas para el rendimiento, use InterlockedCompareExchangeAcquire o InterlockedCompareExchangeRelease en su lugar.
Requisitos
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | winnt.h (incluya Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |
Vea también
Acceso a variables interbloqueados
InterlockedCompare64Exchange128
InterlockedCompareExchange16Acquire
InterlockedCompareExchange16NoFence
InterlockedCompareExchange16Release
InterlockedCompareExchangeAcquire
InterlockedCompareExchangeAcquire64
InterlockedCompareExchangeNoFence
InterlockedCompareExchangeNoFence64
InterlockedCompareExchangePointer
InterlockedCompareExchangePointerAcquire
InterlockedCompareExchangePointerNoFence
InterlockedCompareExchangePointerRelease
InterlockedCompareExchangeRelease