<atomic>
ヘッダでは、アトミック操作(atomic operation : 不可分操作とも呼ばれる)のライブラリを提供する。
アトミック操作は、スレッド間でデータをやり取りするための最も基本的な同期プリミティブであり、 変数への不可分(atomic)な読み込みや書き込み、および読み書きを同時に行う操作(Read-Modify-Write operation)を提供する。
本ヘッダはフリースタンディング環境でも提供される。
フリースタンディング環境の場合、常にロックフリーな整数アトミック型のサポート、atomic_signed_lock_free
やatomic_unsigned_lock_free
の提供可否は処理系定義となる。
順序と一貫性
名前 | 説明 | 対応バージョン |
---|---|---|
memory_order |
メモリオーダーの種類(enum) | C++11 |
kill_dependency |
データ依存性を切る(function template) | C++11 |
ロックフリープロパティ
名前 | 説明 | 対応バージョン |
---|---|---|
ATOMIC_BOOL_LOCK_FREE |
atomic<bool> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_CHAR_LOCK_FREE |
atomic<char> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_CHAR8_T_LOCK_FREE |
atomic<char8_t> に対する操作がロックフリーかを調べる(define) |
C++20 |
ATOMIC_CHAR16_T_LOCK_FREE |
atomic<char16_t> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_CHAR32_T_LOCK_FREE |
atomic<char32_t> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_WCHAR_T_LOCK_FREE |
atomic<wchar_t> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_SHORT_LOCK_FREE |
atomic<short> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_INT_LOCK_FREE |
atomic<int> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_LONG_LOCK_FREE |
atomic<long> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_LLONG_LOCK_FREE |
atomic<long long> に対する操作がロックフリーかを調べる(define) |
C++11 |
ATOMIC_POINTER_LOCK_FREE |
atomic<T*> に対する操作がロックフリーかを調べる(define) |
C++11 |
汎用型
名前 | 説明 | 対応バージョン |
---|---|---|
atomic_ref |
参照したオブジェクトに対してアトミック操作を適用する型(class template) | C++20 |
atomic |
アトミック型(class template) | C++11 |
アトミック型に対する一般的な操作
名前 | 説明 | 対応バージョン |
---|---|---|
atomic_is_lock_free |
指定されたオブジェクトがロックフリーに振る舞うことができるかを調べる(function template) | C++11 |
atomic_init |
初期化(function template) | C++11 C++20から非推奨 |
atomic_store |
値を書き込む(function template) | C++11 |
atomic_store_explicit |
メモリオーダーを指定して値を書き込む(function template) | C++11 |
atomic_load |
値を読み込む(function template) | C++11 |
atomic_load_explicit |
メモリオーダーを指定して値を読み込む(function template) | C++11 |
atomic_exchange |
値を入れ替える(function template) | C++11 |
atomic_exchange_explicit |
メモリオーダーを指定して値を入れ替える(function template) | C++11 |
atomic_compare_exchange_weak |
弱い比較で値の入れ替えを行う(function template) | C++11 |
atomic_compare_exchange_strong |
強い比較で値の入れ替えを行う(function template) | C++11 |
atomic_compare_exchange_weak_explicit |
弱い比較でメモリオーダーを指定して値の入れ替えを行う(function template) | C++11 |
atomic_compare_exchange_strong_explicit |
強い比較でメモリオーダーを指定して値の入れ替えを行う(function template) | C++11 |
アトミック型に対する算術操作
名前 | 説明 | 対応バージョン |
---|---|---|
atomic_fetch_add |
加算(function template) | C++11 |
atomic_fetch_add_explicit |
メモリオーダーを指定して加算(function template) | C++11 |
atomic_fetch_sub |
減算(function template) | C++11 |
atomic_fetch_sub_explicit |
メモリオーダーを指定して減算(function template) | C++11 |
atomic_fetch_and |
AND演算(function template) | C++11 |
atomic_fetch_and_explicit |
メモリオーダーを指定してAND演算(function template) | C++11 |
atomic_fetch_or |
OR演算(function template) | C++11 |
atomic_fetch_or_explicit |
メモリオーダーを指定してOR演算(function template) | C++11 |
atomic_fetch_xor |
XOR演算(function template) | C++11 |
atomic_fetch_xor_explicit |
メモリオーダーを指定してXOR演算(function template) | C++11 |
アトミック型に対するブロッキング同期操作
名前 | 説明 | 対応バージョン |
---|---|---|
atomic_wait |
起床されるまで待機する (function template ) | C++20 |
atomic_wait_explicit |
メモリオーダーを指定して起床されるまで待機する (function template ) | C++20 |
atomic_notify_one |
待機しているスレッドをひとつ起床させる (function template) | C++20 |
atomic_notify_all |
待機している全てのスレッドを起床させる (function template) | C++20 |
初期化
名前 | 説明 | 対応バージョン |
---|---|---|
ATOMIC_VAR_INIT |
アトミック変数の初期化(define) | C++11 C++20から非推奨 |
フラグ型とその操作
名前 | 説明 | 対応バージョン |
---|---|---|
atomic_flag |
フラグ用アトミック型(class) | C++11 |
atomic_flag_test |
現在の値をbool 値として取得する (function) |
C++20 |
atomic_flag_test_explicit |
メモリオーダーを指定して現在の値をbool 値として取得する (function) |
C++20 |
atomic_flag_test_and_set |
フラグを立てる(function) | C++11 |
atomic_flag_test_and_set_explicit |
メモリオーダーを指定してフラグを立てる(function) | C++11 |
atomic_flag_clear |
フラグをクリアする(function) | C++11 |
atomic_flag_clear_explicit |
メモリオーダーを指定してフラグをクリアする(function) | C++11 |
atomic_flag_wait |
起床されるまで待機する (function) | C++20 |
atomic_flag_wait_explicit |
メモリオーダーを指定して起床されるまで待機する (function) | C++20 |
atomic_flag_notify_one |
待機しているスレッドをひとつ起床させる (function) | C++20 |
atomic_flag_notify_all |
待機している全てのスレッドを起床させる (function) | C++20 |
ATOMIC_FLAG_INIT |
フラグ変数の初期化(define) | C++11 C++20から非推奨 |
フェンス
名前 | 説明 | 対応バージョン |
---|---|---|
atomic_thread_fence |
スレッド間で有効なフェンスを設定する(function) | C++11 |
atomic_signal_fence |
スレッドと、そのスレッド上で処理されるシグナルハンドラとの間でのみ有効なフェンスを設定する(function) | C++11 |
バージョン
言語
- C++11