atomic_fetch_and, atomic_fetch_and_explicit
From cppreference.com
| ヘッダ <stdatomic.h>で定義 |
||
| C atomic_fetch_and( volatile A* obj, M arg ); |
(1) | (C11 以降) |
| C atomic_fetch_and_explicit( volatile A* obj, M arg, memory_order order ); |
(2) | (C11 以降) |
objが指す値を、objの古い値とargのビットごとのAND演算の結果でアトミックに置き換え、以前objが保持していた値を返します。この操作は読み取り-変更-書き込み操作です。最初のバージョンはmemory_order_seq_cstに従ってメモリ操作を順序付けし、2番目のバージョンはorderに従ってメモリ操作を順序付けします。
これは、すべての アトミックオブジェクト型 A に対して定義された 汎用関数 です。引数は、非 volatile アトミックオブジェクトと volatile (例:メモリマップドI/O)アトミックオブジェクトの両方のメモリアドレスを受け入れるために、volatile アトミック型へのポインタです。volatile アトミックオブジェクトにこの操作を適用した場合、volatile セマンティクスは保持されます。M は、A がアトミック整数型の場合は A に対応する非アトミック型、または A がアトミックポインタ型の場合は ptrdiff_t です。
汎用関数の名前がマクロであるか、外部リンケージで宣言された識別子であるかは未指定です。実際の関数にアクセスするためにマクロ定義が無効にされている場合(例: (atomic_fetch_and)(...) のように括弧で囲む)、またはプログラムが汎用関数の名前で外部識別子を定義している場合、その動作は未定義です。
目次 |
[編集] パラメータ
| obj | - | 操作対象のアトミックオブジェクトへのポインタ |
| arg | - | アトミックオブジェクトに格納されている値とビットごとにAND演算される値 |
| 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 (関数) | |
| アトミックビット排他的OR (関数) | |