atomic_fetch_xor, atomic_fetch_xor_explicit
From cppreference.com
| ヘッダ <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 が以前保持していた値を返します。この操作は読み取り・変更・書き込み操作です。最初のバージョンはメモリ操作を memory_order_seq_cst に従って順序付けし、2番目のバージョンは order に従ってメモリ操作を順序付けします。
これは、すべての アトミックオブジェクト型 A に対して定義された 汎用関数 です。引数は、非 volatile アトミックオブジェクトと volatile (例:メモリマップドI/O)アトミックオブジェクトの両方のメモリアドレスを受け入れるために、volatile アトミック型へのポインタです。volatile アトミックオブジェクトにこの操作を適用した場合、volatile セマンティクスは保持されます。M は、A がアトミック整数型の場合は A に対応する非アトミック型、または A がアトミックポインタ型の場合は ptrdiff_t です。
汎用関数の名前がマクロであるか、外部リンケージで宣言された識別子であるかは未規定です。実際の関数にアクセスするためにマクロ定義が無効にされた場合(例:(atomic_fetch_xor)(...) のように括弧で囲む)、またはプログラムが汎用関数の名前で外部識別子を定義した場合、その動作は未定義です。
目次 |
[編集] パラメータ
| obj | - | 操作対象のアトミックオブジェクトへのポインタ |
| arg | - | アトミックオブジェクトに格納されている値とビットごとにXORする値 |
| order | - | この操作のメモリ同期順序:すべての値が許可されます |
[編集] 返り値
objが指すアトミックオブジェクトが以前保持していた値。
[編集] 参考文献
- C17標準 (ISO/IEC 9899:2018)
- 7.17.7.5 The atomic_fetch and modify generic functions (p: 208)
- C11標準 (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 について)
| |