Funciones intrínsecas _InterlockedAnd
Específicos de Microsoft
Se utiliza para realizar una operación AND bit a bit atómica en una variable compartida por varios subprocesos.
Sintaxis
long _InterlockedAnd(
long volatile * value,
long mask
);
long _InterlockedAnd_acq(
long volatile * value,
long mask
);
long _InterlockedAnd_HLEAcquire(
long volatile * value,
long mask
);
long _InterlockedAnd_HLERelease(
long volatile * value,
long mask
);
long _InterlockedAnd_nf(
long volatile * value,
long mask
);
long _InterlockedAnd_np(
long volatile * value,
long mask
);
long _InterlockedAnd_rel(
long volatile * value,
long mask
);
char _InterlockedAnd8(
char volatile * value,
char mask
);
char _InterlockedAnd8_acq(
char volatile * value,
char mask
);
char _InterlockedAnd8_nf(
char volatile * value,
char mask
);
char _InterlockedAnd8_np(
char volatile * value,
char mask
);
char _InterlockedAnd8_rel(
char volatile * value,
char mask
);
short _InterlockedAnd16(
short volatile * value,
short mask
);
short _InterlockedAnd16_acq(
short volatile * value,
short mask
);
short _InterlockedAnd16_nf(
short volatile * value,
short mask
);
short _InterlockedAnd16_np(
short volatile * value,
short mask
);
short _InterlockedAnd16_rel(
short volatile * value,
short mask
);
__int64 _InterlockedAnd64(
__int64 volatile* value,
__int64 mask
);
__int64 _InterlockedAnd64_acq(
__int64 volatile* value,
__int64 mask
);
__int64 _InterlockedAnd64_HLEAcquire(
__int64 volatile* value,
__int64 mask
);
__int64 _InterlockedAnd64_HLERelease(
__int64 volatile* value,
__int64 mask
);
__int64 _InterlockedAnd64_nf(
__int64 volatile* value,
__int64 mask
);
__int64 _InterlockedAnd64_np(
__int64 volatile* value,
__int64 mask
);
__int64 _InterlockedAnd64_rel(
__int64 volatile* value,
__int64 mask
);
Parámetros
value
[in, out] Puntero al primer operando, que lo sustituirá el resultado.
mask
[in] El segundo operando.
Valor devuelto
El valor original del primer operando.
Requisitos
Intrinsic | Arquitectura | Encabezado |
---|---|---|
_InterlockedAnd , , _InterlockedAnd8 , _InterlockedAnd16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedAnd64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedAnd_acq , _InterlockedAnd_nf , _InterlockedAnd_rel , _InterlockedAnd8_acq , _InterlockedAnd8_nf , _InterlockedAnd8_rel , _InterlockedAnd16_acq , _InterlockedAnd16_nf _InterlockedAnd16_rel _InterlockedAnd64_acq _InterlockedAnd64_nf _InterlockedAnd64_rel |
ARM, ARM64 | <intrin.h> |
_InterlockedAnd_np , _InterlockedAnd8_np , , _InterlockedAnd16_np , _InterlockedAnd64_np |
x64 | <intrin.h> |
_InterlockedAnd_HLEAcquire , _InterlockedAnd_HLERelease , , _InterlockedAnd64_HLEAcquire , _InterlockedAnd64_HLERelease |
x86, x64 | <immintrin.h> |
Comentarios
El número en el nombre de cada función especifica el tamaño en bits de los argumentos.
En plataformas ARM y ARM64, utilice los intrínsecos con los sufijos _acq
y _rel
para adquirir y liberar semántica; por ejemplo, al principio y al final de una sección crítica. Los intrínsecos con un sufijo _nf
("sin límite") no actúan como una barrera de memoria.
Los intrínsecos con un sufijo _np
("sin captura previa") impiden que el compilador inserte una posible operación de captura previa.
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.
Ejemplo
// InterlockedAnd.cpp
// Compile with: /Oi
#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(_InterlockedAnd)
int main()
{
long data1 = 0xFF00FF00;
long data2 = 0x00FFFF00;
long retval;
retval = _InterlockedAnd(&data1, data2);
printf_s("0x%x 0x%x 0x%x", data1, data2, retval);
}
0xff00 0xffff00 0xff00ff00
FIN de Específicos de Microsoft
Consulte también
Intrínsecos del compilador
Conflictos con el compilador de x86