Namespaces
Variants

atomic_exchange, atomic_exchange_explicit

From cppreference.net
ヘッダーで定義 <stdatomic.h>
C atomic_exchange ( volatile A * obj, C desired ) ;
(1) (C11以降)
C atomic_exchange_explicit ( volatile A * obj, C desired, memory_order order ) ;
(2) (C11以降)

obj が指す値をアトミックに desired で置き換え、以前に obj が保持していた値を返します。この操作はread-modify-write操作です。最初のバージョンはメモリアクセスを memory_order_seq_cst に従って順序付けし、2番目のバージョンはメモリアクセスを order に従って順序付けします。

これはすべての 汎用関数 に対して定義された アトミックオブジェクト型 A です。引数は揮発性アトミック型へのポインタであり、非揮発性と 揮発性 (メモリマップトI/Oなど)の両方のアトミックオブジェクトのアドレスを受け入れます。また、揮発性アトミックオブジェクトにこの操作を適用する際には揮発性のセマンティクスが保持されます。 C A に対応する非アトミック型です。

ジェネリック関数の名前がマクロであるか、外部リンケージで宣言された識別子であるかは未規定です。実際の関数にアクセスするために(例えば括弧で囲んで ( atomic_exchange ) ( ... ) のように)マクロ定義が抑制された場合、またはプログラムがジェネリック関数の名前で外部識別子を定義した場合、動作は未定義です。

目次

パラメータ

obj - 変更対象のアトミックオブジェクトへのポインタ
desired - アトミックオブジェクトと置き換える値
order - この操作のためのメモリ同期順序:すべての値が許可されます

戻り値

アトミックオブジェクトが以前に保持していた値 obj によって指される。

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.17.7.3 atomic_exchange汎用関数 (p: 207)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.17.7.3 atomic_exchange ジェネリック関数 (p: 283)

関連項目

期待される値と一致する場合に値をアトミックオブジェクトと交換し、それ以外の場合には古い値を読み取る
(関数)
C++ドキュメント for atomic_exchange , atomic_exchange_explicit