Поделиться через


Встроенные функции _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, подсказка игнорируется.

Эти процедуры доступны только как встроенные объекты.

См. также

Ссылки

Встроенные объекты компилятора

Конфликты с компилятором x86