最終更新日時(UTC):
が更新

履歴 編集

<atomic>

atomic(C++11)

<atomic>ヘッダでは、アトミック操作(atomic operation : 不可分操作とも呼ばれる)のライブラリを提供する。

アトミック操作は、スレッド間でデータをやり取りするための最も基本的な同期プリミティブであり、 変数への不可分(atomic)な読み込みや書き込み、および読み書きを同時に行う操作(Read-Modify-Write operation)を提供する。

本ヘッダはフリースタンディング環境でも提供される。 フリースタンディング環境の場合、常にロックフリーな整数アトミック型のサポート、atomic_signed_lock_freeatomic_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

関連項目

参照