<atomic>
クラスとテンプレート クラスを分割できない操作をサポートする型を作成するように定義します。
#include <atomic>
解説
[!メモ]
/clr か /clr:pureを使用してコンパイルされたコードでは、このヘッダーはブロックされます。
分割不可能な操作に正しくミューテックスのロックを使用せずに、オブジェクトを処理するには、複数のスレッドを使用できる2種類の主要なプロパティがあります。
アトミック操作が分割不可能であるため、別のスレッドで同一のオブジェクトの2番目の分割不可能な操作は、最初のアトミック操作の前または後にのみオブジェクトの状態を取得できます。
memory_order の引数に基づいて、分割不可能な操作は、同じスレッドに他のアトミック操作の効果を表示する手順の条件を設定します。その結果、命令の要件に違反するコンパイラの最適化を禁じます。
一部のプラットフォームでは、効率的に mutex のロックを使用せずに、型の分割不可能な操作を実行することができない可能性があります。アトミック型は、その型の使用のアトミック操作がロックする ロック制御不要 です。
クラス atomic_flag は bool フラグを保持最小のアトミック型を提供します。その操作は常にロック制御不要です。
テンプレート クラス atomic<Ty> は引数の型 Ty のオブジェクトを格納し、変数へのアクセスは、格納されている値を提供します。[memcpy] を使用して、コピー、等価性 [memcmp]を使用してテストできる型でインスタンス化できます。特に、浮動小数点型でこれらの条件を満たす、多くの場合、ユーザー定義型に使用できます。
テンプレートには、一連の整数型の特殊化とポインターの部分的特殊化があります。これらの特化がプライマリ テンプレートからは利用できない追加の操作を提供します。
ポインターの特殊化
atomic<Ty *> の部分的特殊化は、すべてのポインター型に適用されます。これらはポインター演算のメソッドを提供します。
必要な特殊化
atomic<integral> の特殊化を必要なすべての型に適用します。これらはプライマリ テンプレートからは利用できない追加の操作を提供します。
atomic<integral> の各型には、その型の操作はロック制御不要であるかどうか、コンパイル時に確認するには、if directive で使用できる対応するマクロがあります。マクロの値がゼロの場合、型の操作は、ロック制御なしではありません。値が1の場合、演算は、ロック制御なしでない可能性もあるのでランタイム チェックが必要です。値が2の場合、演算はロック制御不要です。型の操作がロック制御不要であるかどうかを実行時に確認するには atomic_is_lock_free 関数を使用できます。
整数型の場合、その整数型のオブジェクトを管理する、対応する名前付き分割不可能な種類があります。atomic_integral の種類に対応する atomic<Ty> のインスタンス化にメンバー関数のセットがあり、非メンバーのアトミック関数に渡すことができます。
atomic_integral の型 |
整数型 |
atomic_is_lock_free のマクロ |
---|---|---|
atomic_char |
char |
ATOMIC_CHAR_LOCK_FREE |
atomic_schar |
signed char |
ATOMIC_CHAR_LOCK_FREE |
atomic_uchar |
unsigned char |
ATOMIC_CHAR_LOCK_FREE |
atomic_char16_t |
char16_t |
ATOMIC_CHAR16_T_LOCK_FREE |
atomic_char32_t |
char32_t |
ATOMIC_CHAR32_T_LOCK_FREE |
atomic_wchar_t |
wchar_t |
ATOMIC_WCHAR_T_LOCK_FREE |
atomic_short |
short |
ATOMIC_SHORT_LOCK_FREE |
atomic_ushort |
unsigned short |
ATOMIC_SHORT_LOCK_FREE |
atomic_int |
int |
ATOMIC_INT_LOCK_FREE |
atomic_uint |
unsigned int |
ATOMIC_INT_LOCK_FREE |
atomic_long |
long |
ATOMIC_LONG_LOCK_FREE |
atomic_ulong |
unsigned long |
ATOMIC_LONG_LOCK_FREE |
atomic_llong |
long long |
ATOMIC_LLONG_LOCK_FREE |
atomic_ullong |
unsigned long long |
ATOMIC_LLONG_LOCK_FREE |
typedefの名前は、ヘッダー <inttypes.h>で定義されている型の一部のアトミック テンプレートの特化には、あります。
アトミック型 |
typedefの名前 |
---|---|
atomic_int8_t |
atomic<int8_t> |
atomic_uint8_t |
atomic<uint8_t> |
atomic_int16_t |
atomic<int16_t> |
atomic_uint16_t |
atomic<uint16_t> |
atomic_int32_t |
atomic<int32_t> |
atomic_uint32_t |
atomic<uint32_t> |
atomic_int64_t |
atomic<int64_t> |
atomic_uint64_t |
atomic<uint64_t> |
atomic_int_least8_t |
atomic<int_least8_t> |
atomic_uint_least8_t |
atomic<uint_least8_t> |
atomic_int_least16_t |
atomic<int_least16_t> |
atomic_uint_least16_t |
atomic<uint_least16_t> |
atomic_int_least32_t |
atomic<int_least32_t> |
atomic_uint_least32_t |
atomic<uint_least32_t> |
atomic_int_least64_t |
atomic<int_least64_t> |
atomic_uint_least64_t |
atomic<uint_least64_t> |
atomic_int_fast8_t |
atomic<int_fast8_t> |
atomic_uint_fast8_t |
atomic<uint_fast8_t> |
atomic_int_fast16_t |
atomic<int_fast16_t> |
atomic_uint_fast16_ |
atomic<uint_fast16_t> |
atomic_int_fast32_t |
atomic<int_fast32_t> |
atomic_uint_fast32_t |
atomic<uint_fast32_t> |
atomic_int_fast64_t |
atomic<int_fast64_t> |
atomic_uint_fast64_t |
atomic<uint_fast64_t> |
atomic_intptr_t |
atomic<intptr_t> |
atomic_uintptr_t |
atomic<uintptr_t> |
atomic_size_t |
atomic<size_t> |
atomic_ptrdiff_t |
atomic<ptrdiff_t> |
atomic_intmax_t |
atomic<intmax_t> |
atomic_uintmax_t |
atomic<uintmax_t> |
構造体
名前 |
説明 |
---|---|
格納されている値の分割不可能な操作を実行するオブジェクトについて説明します。 |
|
アトミックに設定される bool のフラグをクリアするオブジェクトについて説明します。 |
列挙型
名前 |
説明 |
---|---|
メモリ位置の同期操作でシンボル名を指定します。これらの操作は1種類のスレッドの割り当てを別の要素に表示されるように変換するかに影響します。 |
関数
次の一覧では、_explicit で終了関数に対応する _explicitセマンティクスが、あります。memory_order_seq_cstの memory_order の暗黙の引数があります。
名前 |
説明 |
---|---|
アトミックを比較し、交換の 操作を実行します。 |
|
アトミックを比較し、交換の 操作を実行します。 |
|
弱いアトミックを比較し、交換の 操作を実行します。 |
|
弱いアトミックを比較し、交換の 操作を実行します。 |
|
格納されている値を置き換えます。 |
|
格納されている値を置き換えます。 |
|
既存の格納された値にある値を追加します。 |
|
既存の格納された値にある値を追加します。 |
|
指定された値との and 格納されている値をビットごとに実行されます。 |
|
指定された値との and 格納されている値をビットごとに実行されます。 |
|
指定された値との or 格納されている値をビットごとに実行されます。 |
|
指定された値との or 格納されている値をビットごとに実行されます。 |
|
既存の格納された値から指定された値を減算します。 |
|
既存の格納された値から指定された値を減算します。 |
|
指定された値との exclusive or 格納されている値をビットごとに実行されます。 |
|
指定された値との exclusive or 格納されている値をビットごとに実行されます。 |
|
falseへの atomic_flag のオブジェクトにフラグを設定します。 |
|
falseへの atomic_flag のオブジェクトにフラグを設定します。 |
|
trueへの atomic_flag のオブジェクトにフラグを設定します。 |
|
trueへの atomic_flag のオブジェクトにフラグを設定します。 |
|
atomic のオブジェクトに格納されている値を設定します。 |
|
指定されたオブジェクトのアトミック操作がロック制御不要であるかどうかを指定します。 |
|
アトミックに値を取得します。 |
|
アトミックに値を取得します。 |
|
同じスレッドで実行される通知のハンドラーがある呼び出し元のスレッドにメモリ フェンス間の命令の条件を設定する フェンス として機能します。 |
|
アトミックに値を格納します。 |
|
アトミックに値を格納します。 |
|
他のメモリ フェンス全体に対して命令の条件を設定する フェンス として機能します。 |
|
可能な依存関係チェーンを中断します。 |