Funções intrínsecas _interlockedbittestandreset
Seção específica da Microsoft
Gere uma instrução que examina o bit b
do endereço a
e retorna o valor atual dele antes de defini-lo como 1.
Sintaxe
unsigned char _interlockedbittestandset(
long *a,
long b
);
unsigned char _interlockedbittestandset_acq(
long *a,
long b
);
unsigned char _interlockedbittestandset_HLEAcquire(
long *a,
long b
);
unsigned char _interlockedbittestandset_HLERelease(
long *a,
long b
);
unsigned char _interlockedbittestandset_nf(
long *a,
long b
);
unsigned char _interlockedbittestandset_rel(
long *a,
long b
);
unsigned char _interlockedbittestandset64(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_acq(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_nf(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_rel(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_HLEAcquire(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_HLERelease(
__int64 *a,
__int64 b
);
Parâmetros
a
[in] Um ponteiro para a memória a ser examinada.
b
[in] A posição de bit a ser testada.
Valor retornado
O valor de bit na posição b
antes que ele seja definido.
Requisitos
Intrinsic | Arquitetura | Cabeçalho |
---|---|---|
_interlockedbittestandset |
x86, ARM, x64, ARM64 | <intrinca.h> |
_interlockedbittestandset_acq , _interlockedbittestandset_nf , _interlockedbittestandset_rel |
ARM, ARM64 | <intrinca.h> |
_interlockedbittestandset64_acq , _interlockedbittestandset64_nf , _interlockedbittestandset64_rel |
ARM64 | <intrinca.h> |
_interlockedbittestandset_HLEAcquire , _interlockedbittestandset_HLERelease |
x86, x64 | <immintrin.h> |
_interlockedbittestandset64 |
x64, ARM64 | <intrinca.h> |
_interlockedbittestandset64_HLEAcquire , _interlockedbittestandset64_HLERelease |
x64 | <immintrin.h> |
Comentários
Em processadores x86 e x64, esses intrínsecos usam a instrução lock bts
para ler e definir o bit especificado como 1. A operação é atômica.
Em processadores de ARM e ARM64, use intrínsecos com os sufixos _acq
e _rel
para semântica de aquisição e liberação, como no início e no final de uma seção crítica. Os intrínsecos de ARM com um sufixo _nf
("no fence") não funcionam como uma barreira de memória.
Em processadores Intel que suportam instruções HLE (Elisão de Bloqueio de Hardware), intrínsecos com os sufixos _HLEAcquire
e _HLERelease
incluem uma dica para o processador que pode acelerar o desempenho, eliminando uma etapa de gravação de bloqueio no hardware. Se esses intrínsecos forem chamados em processadores que não dão suporte a HLE, a dica será ignorada.
Essas rotinas somente estão disponíveis como intrínsecos.
Fim da seção específica da Microsoft