C ++ライブラリ-<アトミック>

前書き

これらは、アクセスがデータ競合を引き起こさないことが保証されている値をカプセル化するタイプであり、異なるスレッド間でメモリアクセスを同期するために使用できます。アトミックライブラリは、ロックレス並行プログラミングを可能にするきめ細かいアトミック操作のコンポーネントを提供します。各アトミック操作は、同じオブジェクトを含む他のアトミック操作に関して分割できません。

原子型

シニア番号 メンバーの種類と定義
1 アトミック

アトミッククラステンプレートとbool、integral、およびpointerタイプの特殊化

Cスタイルの原子型

以下はアトミックタイプであり、このヘッダーでも定義されています。

基本的な整数型のアトミック。

これらは、対応する完全な特殊化のtypedefです。 アトミック クラステンプレートまたはそのような専門分野の基本クラス。

幅ベースの積分のアトミック(で定義されているもの)<cinttypes>)。

これらのそれぞれは、基本的な整数型の上記のアトミックの1つのエイリアスであるか、またはアトミック拡張整数型のクラステンプレート。

ここで、Nは、8、16、32、64、またはライブラリでサポートされているその他のタイプ幅の1つです。

含まれるタイプ 原子型 説明
bool atomic_bool
char atomic_char
signed char atomic_schar
unsigned char atomic_uchar
short atomic_short
unsigned short atomic_ushort
int atomic_int
unsigned int atomic_uint
long atomic_long
unsigned long atomic_ulong
long long atomic_llong
unsigned long long atomic_ullong
wchar_t atomic_wchar_t
char16_t atomic_char16_t
char32_t atomic_char32_t
intmax_t atomic_intmax_t
uintmax_t atomic_uintmax_t
int_leastN_t atomic_int_leastN_t
uint_leastN_t atomic_uint_leastN_t
int_fastN_t atomic_int_fastN_t
uint_fastN_t atomic_uint_fastN_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t atomic_size_t
ptrdiff_t atomic_ptrdiff_t

アトミックタイプの操作

シニア番号 操作と定義
1 atomic_is_lock_free

アトミックタイプの操作がロックフリーかどうかをチェックするために使用されます

2 atomic_store&atomic_store_explicit

アトミックオブジェクトの値を非アトミック引数に自動的に置き換えます

3 atomic_load&atomic_load_explicit

アトミックオブジェクトに格納されている値をアトミックに取得します

4 atomic_exchange&atomic_exchange_explicit

アトミックオブジェクトの値を非アトミック引数にアトミックに置き換え、アトミックの古い値を返します

5 atomic_compare_exchange_weak&atomic_compare_exchange_weak_explicit&atomic_compare_exchange_strong&atomic_compare_exchange_strong_explicit

アトミックオブジェクトの値を非アトミック引数とアトミックに比較し、等しい場合はアトミック交換を実行し、等しくない場合はアトミックロードを実行します。

6 atomic_fetch_add&atomic_fetch_add_explicit

アトミックオブジェクトに非アトミック値を追加し、アトミックの以前の値を取得します

7 atomic_fetch_sub&atomic_fetch_sub_explicit

アトミックオブジェクトから非アトミック値を減算し、アトミックの以前の値を取得します

8 atomic_fetch_and&atomic_fetch_and_explicit

アトミックオブジェクトを論理ANDの結果で非アトミック引数に置き換え、アトミックの以前の値を取得します

9 atomic_fetch_or&atomic_fetch_or_explicit

アトミックオブジェクトを非アトミック引数を使用した論理ORの結果に置き換え、アトミックの以前の値を取得します

10 atomic_fetch_xor&atomic_fetch_xor_explicit

アトミックオブジェクトを非アトミック引数を使用した論理XORの結果に置き換え、アトミックの以前の値を取得します

フラグの種類と操作

シニア番号 フラグの種類と定義
1 atomic_flag

ロックフリーブールアトミックタイプ

2 atomic_flag_test_and_set&atomic_flag_test_and_set_explicit

フラグをアトミックにtrueに設定し、以前の値を返します

3 atomic_flag_clear&atomic_flag_clear_explicit

フラグの値をアトミックにfalseに設定します