_interlockedbittestandreset, _interlockedbittestandreset64
Section spécifique à Microsoft
Génère une instruction qui affecte la valeur zéro au bit b de l'adresse a et retourne sa valeur d'origine.
unsigned char _interlockedbittestandreset(
long *a,
long b
);
unsigned char _interlockedbittestandreset_acq(
long *a,
long b
);
unsigned char _interlockedbittestandreset_HLEAcquire(
long *a,
long b
);
unsigned char _interlockedbittestandreset_HLERelease(
long *a,
long b
);
unsigned char _interlockedbittestandreset_nf(
long *a,
long b
);
unsigned char _interlockedbittestandreset_rel(
long *a,
long b
);
unsigned char _interlockedbittestandreset64(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandreset64_HLEAcquire(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandreset64_HLERelease(
__int64 *a,
__int64 b
);
Paramètres
[in] a
Pointeur vers la mémoire à examiner.[in] b
Position du bit à tester.
Valeur de retour
Valeur d'origine du bit à la position spécifiée par b.
Configuration requise
Intrinsèque |
Architecture |
Header |
---|---|---|
_interlockedbittestandreset |
x86, ARM, x64 |
<intrin.h> |
_interlockedbittestandreset_acq, _interlockedbittestandreset_nf, _interlockedbittestandreset_rel |
ARM |
<intrin.h> |
_interlockedbittestandreset_HLEAcquire, _interlockedbittestandreset_HLERelease |
x86, x64 |
<immintrin.h> |
_interlockedbittestandreset64 |
x64 |
<intrin.h> |
_interlockedbittestandreset64_HLEAcquire, _interlockedbittestandreset64_HLERelease |
x64 |
<immintrin.h> |
Notes
Sur les processeurs x86 et x64, ces fonctions intrinsèques utilisent l'instruction lock btr, qui lit et affecte la valeur zéro au bit spécifié lors d'une opération atomique.
Sur les processeurs ARM, utilisez les intrinsèques avec les suffixes _acq et _rel pour les sémantiques Acquire et Release, par exemple au début et à la fin d'une section critique. Les fonctions intrinsèques ARM avec un suffixe _nf (pour « no fence », « pas de délimitation ») n'agissent pas comme une barrière mémoire.
Sur les processeurs Intel qui prennent en charge les instructions HLE (Hardware Lock Elision), les intrinsèques ayant les suffixes _HLEAcquire et _HLERelease incluent une indication pour le processeur. Celle-ci permet d'accélérer les performances en éliminant une étape d'écriture de verrou dans le matériel. Si ces intrinsèques sont appelés pour des processeurs qui ne prennent pas en charge les instructions HLE, l'indication est ignorée.
Ces routines sont disponibles seulement comme fonctions intrinsèques.