Namespaces
Variants

atomic_fetch_xor, atomic_fetch_xor_explicit

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

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

これはすべての generic function に対して定義された atomic object types A です。引数はvolatile atomic型へのポインタであり、非volatileと volatile (例:メモリマップドI/O)の両方のatomicオブジェクトのアドレスを受け入れます。また、volatile atomicオブジェクトにこの操作を適用する際にはvolatileセマンティクスが保持されます。 M は、 A がatomic整数型の場合は A に対応する非atomic型、または A がatomicポインタ型の場合は ptrdiff_t のいずれかです。

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

目次

パラメータ

obj - 変更対象のアトミックオブジェクトへのポインタ
arg - アトミックオブジェクトに格納された値とビット単位XORする値
order - この操作に対するメモリ同期順序:すべての値が許可されます

戻り値

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

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.17.7.5 atomic_fetchおよびmodify汎用関数 (p: 208)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.17.7.5 The atomic_fetch and modify generic functions (p: 284-285)

関連項目

アトミックビット単位OR
(関数)
アトミックビット単位AND
(関数)
C++ドキュメント を参照 atomic_fetch_xor , atomic_fetch_xor_explicit