Funções intrínsecas _interlockedbittestandset
Específico da Microsoft
Gere uma instrução que examina o bit b do endereço a e retorna seu valor atual antes de defini-la como 1.
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_HLEAcquire(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_HLERelease(
__int64 *a,
__int64 b
);
Parâmetros
[in] a
Um ponteiro para a memória a examinar.[in] b
A posição de bit a testar.
Valor de retorno
O valor de bit na posição b antes que ele seja definido.
Requisitos
Intrínseco |
Arquitetura |
Cabeçalho |
---|---|---|
_interlockedbittestandset |
x86, ARM, x64 |
<intrin.h> |
_interlockedbittestandset_acq, _interlockedbittestandset_nf, _interlockedbittestandset_rel |
ARM |
<intrin.h> |
_interlockedbittestandset_HLEAcquire, _interlockedbittestandset_HLERelease |
x86, x64 |
<immintrin.h> |
_interlockedbittestandset64 |
x64 |
<intrin.h> |
_interlockedbittestandset64_HLEAcquire, _interlockedbittestandset64_HLERelease |
x64 |
<immintrin.h> |
Comentários
Em processadores x86 and 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, 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.