名前空間
変種
操作

atomic_fetch_sub, atomic_fetch_sub_explicit

提供: cppreference.com
< c‎ | atomic
ヘッダ <stdatomic.h> で定義
C atomic_fetch_sub( volatile A* obj, M arg );
(1) (C11およびそれ以降)
C atomic_fetch_sub_explicit( volatile A* obj, M arg, memory_order order );
(2) (C11およびそれ以降)

obj の指す値を obj の古い値から arg を減算した結果にアトミックに置き換え、 obj がそれまで保持していた値を返します。 この操作は読み込み-変更-書き込み操作です。 1つめのバージョンは memory_order_seq_cst に従ってメモリアクセスを順序付けし、 2つめのバージョンは order に従ってメモリアクセスを順序付けします。

これはすべてのアトミックオブジェクト型 A に対して定義される総称関数です。 引数は非 volatile と volatile (メモリマップド I/O など) 両方のアトミック変数のアドレスを受理するための volatile アトミック型へのポインタです。 MA がアトミック整数型の場合は A に対応する非アトミック型、 A がアトミックポインタ型の場合は ptrdiff_t です。

符号付き整数型の場合、算術は2の補数表現を用いて定義されます。 未定義の結果はありません。 ポインタ型の場合、結果が未定義のアドレスとなる場合はありますが、それ以外で演算に未定義動作はありません。

目次

[編集] 引数

obj - 変更するアトミックオブジェクトを指すポインタ
arg - アトミックオブジェクトに格納されている値から減算する値
order - この操作に対するメモリ同期順序付け。 すべての値を指定できます

[編集] 戻り値

obj の指すアトミックオブジェクトがそれまで保持していた値。

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.17.7.5 The atomic_fetch and modify generic functions (p: 284-285)

[編集] 関連項目

アトミックな加算
(関数) [edit]
atomic_fetch_sub, atomic_fetch_sub_explicitC++リファレンス