名前空間
変種
操作

atomic_fetch_or, atomic_fetch_or_explicit

From cppreference.com
< C‎ | atomic
ヘッダ<stdatomic.h>で定義
C atomic_fetch_or( volatile A* obj, M arg );
(1) (C11 以降)
C atomic_fetch_or_explicit( volatile A* obj, M arg, memory_order order );
(2) (C11 以降)

objが指す値を、objの古い値とargとのビットごとのOR演算の結果でアトミックに置き換え、objが以前保持していた値を返します。この操作は読み込み・修正・書き込み操作です。最初のバージョンは、メモリへのアクセスをmemory_order_seq_cstに従って順序付けます。2番目のバージョンは、メモリへのアクセスをorderに従って順序付けします。

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

汎用関数の名前がマクロであるか、外部リンケージで宣言された識別子であるかは未指定です。実際の関数にアクセスするためにマクロ定義が無効にされた場合(例:(atomic_fetch_or)(...)のように括弧で囲む)、またはプログラムが汎用関数と同じ名前の外部識別子を定義した場合、その動作は未定義です。

目次

[編集] パラメータ

obj - 操作対象のアトミックオブジェクトへのポインタ
arg - アトミックオブジェクトに格納されている値に対してビットごとのOR演算を行う値
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)

[編集] 関連項目

アトミックビットAND
(関数) [編集]
アトミックビット排他的OR
(関数) [編集]
C++ドキュメント (atomic_fetch_or, atomic_fetch_or_explicit)
English 日本語 中文(简体) 中文(繁體)