Funciones intrínsecas _InterlockedExchangeAdd
Específicos de Microsoft
Facilite la compatibilidad intrínseca del compilador con la función _InterlockedExchangeAdd Intrinsic Functions de Win32 de Windows SDK.
Sintaxis
long _InterlockedExchangeAdd(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_acq(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_rel(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_nf(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLEAcquire(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLERelease(
long volatile * Addend,
long Value
);
char _InterlockedExchangeAdd8(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_acq(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_rel(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_nf(
char volatile * Addend,
char Value
);
short _InterlockedExchangeAdd16(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_acq(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_rel(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_nf(
short volatile * Addend,
short Value
);
__int64 _InterlockedExchangeAdd64(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_acq(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_rel(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_nf(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLEAcquire(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLERelease(
__int64 volatile * Addend,
__int64 Value
);
Parámetros
Addend
[in, out] El valor al que se agregará; lo reemplaza el resultado de la suma.
Valor
[in] El valor que se va a agregar.
Valor devuelto
El valor devuelto es el valor inicial de la variable a la que apunta el parámetro Addend
.
Requisitos
Intrinsic | Arquitectura | Encabezado |
---|---|---|
_InterlockedExchangeAdd , , _InterlockedExchangeAdd8 , _InterlockedExchangeAdd16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_acq , _InterlockedExchangeAdd_rel , _InterlockedExchangeAdd_nf , _InterlockedExchangeAdd8_acq , _InterlockedExchangeAdd8_rel , _InterlockedExchangeAdd8_nf , _InterlockedExchangeAdd16_acq , _InterlockedExchangeAdd16_rel _InterlockedExchangeAdd16_nf _InterlockedExchangeAdd64_acq _InterlockedExchangeAdd64_rel _InterlockedExchangeAdd64_nf |
ARM, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_HLEAcquire , _InterlockedExchangeAdd_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchangeAdd64_HLEAcquire , _InterlockedExchangeAdd64_HLErelease |
x64 | <immintrin.h> |
Comentarios
Hay diversas variaciones en _InterlockedExchangeAdd
que varían en función de los tipos de datos que implican y de si se utiliza la liberación o la adquisición de semántica específica del procesador.
Mientras que la función _InterlockedExchangeAdd
opera con valores enteros de 32 bits, _InterlockedExchangeAdd8
opera con valores enteros de 8 bits, _InterlockedExchangeAdd16
opera con valores enteros de 16 bits y _InterlockedExchangeAdd64
opera con valores enteros de 64 bits.
En plataformas ARM, utilice los intrínsecos con sufijos _acq
y _rel
si necesita adquirir y liberar semántica, como al principio y al final de una sección crítica. Los intrínsecos con un sufijo _nf
("sin barrera") no actúan como una barrera de memoria.
En las plataformas de Intel que admiten instrucciones de Elisión de bloqueo de Hardware (HLE), los intrínsecos con sufijos _HLEAcquire
y _HLERelease
incluyen una sugerencia para el procesador que puede acelerar el rendimiento mediante la eliminación de un paso de escritura de bloqueo en el hardware. Si se llama a estos intrínsecos en plataformas que no son compatibles con HLE, se omite la sugerencia.
Estas rutinas solo están disponibles como intrínsecos. Son intrínsecos incluso cuando se usa /Oi o #pragma intrinsic. No es posible utilizar la función #pragma en estos intrínsecos.
Ejemplo
Para un ejemplo de cómo usar _InterlockedExchangeAdd
, consulte _InterlockedDecrement.
FIN de Específicos de Microsoft
Consulte también
Intrínsecos del compilador
Palabras clave
Conflictos con el compilador de x86