Cpp-standard-library-atomic

提供:Dev Guides
移動先:案内検索

C ++ライブラリ-<原子>

前書き

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

原子タイプ

Sr.No. Member types & Definition
1

atomic

アトミッククラステンプレートと、ブール型、整数型、およびポインター型の特殊化

Cスタイルの原子型

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

含まれるタイプ

原子型

説明

+ bool +

+ atomic_bool +

+ char +

+ atomic_char +

_基本積分型_のアトミック。

これらは、 `+ atomic +`クラステンプレートの対応する完全な特殊化のtypedefまたはそのような特殊化の基本クラスです。

+ 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 +

width-based integers( `+ <cinttypes> +`で定義されているもの)のアトミック。

これらはそれぞれ、上記の_基本的な整数型のアトミックのエイリアスのいずれか、または_extended integer type_を使用した `+ atomic +`クラステンプレートの完全な特殊化のエイリアスです。

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

+ uintmax_t +

+ atomic_uintmax_t +

+ int_least + N` + _t + `

+ atomic_int_least + N` + _t + `

+ uint_least + N` + _t + `

+ atomic_uint_least + N` + _t + `

+ int_fast + N` + _t + `

+ atomic_int_fast + N` + _t + `

+ uint_fast + N` + _t + `

+ atomic_uint_fast + N` + _t + `

+ intptr_t +

+ atomic_intptr_t +

+ uintptr_t +

+ atomic_uintptr_t +

+ size_t +

+ atomic_size_t +

+ ptrdiff_t +

+ atomic_ptrdiff_t +

アトミックタイプの操作

シニア

操作と定義

&

1

リンク:/cpp_standard_library/cpp_atomic_is_lock_free [atomic_is_lock_free]

原子型の操作がロックフリーかどうかを確認するために使用されます

2

リンク:/cpp_standard_library/cpp_atomic_store [atomic_store&atomic_store_explicit]

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

3

リンク:/cpp_standard_library/cpp_atomic_load [atomic_load&atomic_load_explicit]

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

4

リンク:/cpp_standard_library/cpp_atomic_exchange [atomic_exchange&atomic_exchange_explicit]

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

5

リンク:/cpp_standard_library/cpp_atomic_compare_exchange [atomic_compare_exchange_weak&atomic_compare_exchange_weak_explicit&atomic_compare_exchange_strong&atomic_compare_exchange_strong_explicit]

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

6

リンク:/cpp_standard_library/cpp_atomic_fetch_add [atomic_fetch_add&atomic_fetch_add_explicit]

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

7

リンク:/cpp_standard_library/cpp_atomic_fetch_sub [atomic_fetch_sub&atomic_fetch_sub_explicit]

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

8

リンク:/cpp_standard_library/cpp_atomic_fetch_and [atomic_fetch_and&atomic_fetch_and_explicit]

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

9

リンク:/cpp_standard_library/cpp_atomic_fetch_or [atomic_fetch_or&atomic_fetch_or_explicit]

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

10

リンク:/cpp_standard_library/cpp_atomic_fetch_xor [atomic_fetch_xor&atomic_fetch_xor_explicit]

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

フラグの種類と操作

Sr.No. Flag type & Definition
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に設定します