Встроенные функции _interlockedbittestandset
Блок, относящийся только к системам Microsoft
Создать инструкцию, которая проверяет разряд b адреса a и возвращает его текущее значение перед присваиванием 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
);
Параметры
[in] a
Указатель на область памяти для проверки.[in] b
Позиция разряда для тестирования.
Возвращаемое значение
Значение разряда в позиции b перед присваиванием.
Требования
Встроенная функция |
Архитектура |
Header |
---|---|---|
_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 > |
Заметки
На платформах процессоров x86 и x64, эти встроенные функции используют инструкцию lock bts для чтения и присваивания указанному разряду 1. Эта операция является атомарной.
На процессорах ARM используются встроенные функции с суффиксами _acq и _rel для получения и освобождения семантики, например, в начале и конце критической секции. Встроенные функции ARM с суффиксом _nf («без границ») не действуют как барьер памяти.
Для процессоров Intel, поддерживающих инструкции Hardware Lock Elision (HLE), встроенные функции с суффиксами**_HLEAcquire** и _HLERelease включают подсказку процессору, как можно повысить производительность, устраняя шаг записи с блокировкой оборудования. Если эти встроенные функции вызываются на процессорах, не поддерживающих HLE, подсказка игнорируется.
Эти процедуры доступны только как встроенные объекты.