fonctions intrinsèques _interlockedbittestandreset
Section spécifique à Microsoft
Génère une instruction pour définir le bit b
de l’adresse a
sur zéro et retourner sa valeur d’origine.
Syntaxe
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_acq(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandreset64_nf(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandreset64_rel(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandreset64_HLEAcquire(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandreset64_HLERelease(
__int64 *a,
__int64 b
);
Paramètres
a
[in] Pointeur vers la mémoire à examiner.
b
[in] Position du bit à tester.
Valeur retournée
Valeur d'origine du bit à la position spécifiée par b
.
Spécifications
Intrinsic | Architecture | En-tête |
---|---|---|
_interlockedbittestandreset |
x86, ARM, x64, ARM64 | <intrin.h> |
_interlockedbittestandreset_acq , , _interlockedbittestandreset_nf _interlockedbittestandreset_rel |
ARM, ARM64 | <intrin.h> |
_interlockedbittestandreset64_acq , , _interlockedbittestandreset64_nf _interlockedbittestandreset64_rel |
ARM64 | <intrin.h> |
_interlockedbittestandreset_HLEAcquire , _interlockedbittestandreset_HLERelease |
x86, x64 | <immintrin.h> |
_interlockedbittestandreset64 |
x64, ARM64 | <intrin.h> |
_interlockedbittestandreset64_HLEAcquire , _interlockedbittestandreset64_HLERelease |
x64 | <immintrin.h> |
Notes
Sur les processeurs x86 et x64, ces intrinsèques utilisent l’instruction lock btr
, qui lit et définit le bit spécifié sur zéro dans 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 intrinsèques ARM avec un _nf
suffixe (« sans clôture ») ne font pas office de barrière de 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ées sur des processeurs qui ne prennent pas en charge HLE, l’indicateur est ignoré.
Ces routines sont disponibles seulement comme fonctions intrinsèques.
FIN de la section spécifique à Microsoft
Voir aussi
Intrinsèques du compilateur
Conflits avec le compilateur x86