_interlockedbittestandset の組み込み関数
Microsoft 固有の仕様
アドレス a
のビット b
を調べ、現在の値を返してから 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_acq(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_nf(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_rel(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_HLEAcquire(
__int64 *a,
__int64 b
);
unsigned char _interlockedbittestandset64_HLERelease(
__int64 *a,
__int64 b
);
パラメーター
a
[in] 検査するメモリを指すポインター。
b
[in] テストするビット位置。
戻り値
ビット値が設定される前の位置 b
のビット値。
要件
Intrinsic | Architecture | ヘッダー |
---|---|---|
_interlockedbittestandset |
x86、ARM、x64、ARM64 | <intrin.h> |
_interlockedbittestandset_acq 、 _interlockedbittestandset_nf 、 _interlockedbittestandset_rel |
ARM、ARM64 | <intrin.h> |
_interlockedbittestandset64_acq 、 _interlockedbittestandset64_nf 、 _interlockedbittestandset64_rel |
ARM64 | <intrin.h> |
_interlockedbittestandset_HLEAcquire , _interlockedbittestandset_HLERelease |
x86、x64 | <immintrin.h> |
_interlockedbittestandset64 |
x64、ARM64 | <intrin.h> |
_interlockedbittestandset64_HLEAcquire , _interlockedbittestandset64_HLERelease |
x64 | <immintrin.h> |
解説
x86 および x64 プロセッサでは、これらの組み込みは lock bts
命令を使用して指定したビットを読み込み、その値を 1 に設定します。 この操作はアトミックです。
ARM と ARM64 プロセッサでは、クリティカル セクションの最初と最後などでの取得と解放のセマンティクスのために、_acq
や _rel
サフィックスの付いた組み込みを使用します。 ARM の組込み関数で _nf
("no fence") のサフィックスを持つものは、メモリ バリアとして機能しません。
Hardware Lock Elision (HLE) 命令をサポートする Intel プロセッサでは、_HLEAcquire
および _HLERelease
サフィックスの付いた組み込みにプロセッサへのヒントが含まれています。このヒントによりハードウェアでのロック書き込み手順を省くことで、パフォーマンスを向上させることができます。 HLE をサポートしていないプロセッサ上でこれらの組み込みが呼び出された場合、ヒントは無視されます。
これらのルーチンは、組み込みとしてのみ使用できます。
Microsoft 固有の仕様はここまで