atomic_fetch_sub函数
概要:
#include <stdatomic.h> C atomic_fetch_sub(volatile A *object, M operand);
描述:
该泛型函数将参数object指向的原子对象值减去参数operand,得到的结果替换参数object指向的原子对象值。该操作是个原子的读-修改-写操作。该函数适用于原子整数类型对象,但不包括atomic_bool类型对象。
对于有符号整数类型,算术定义使用二进制补码形式表示,并且溢出时进行安静绕回处理(silent wrap-around on overflow);不存在未定义结果。对于地址类型,结果可能是未定义地址,但操作没有未定义行为。
该泛型函数和复合赋值运算符-=几乎等价,区别主要在于:
1、复合赋值运算符-=不能保证是原子操作。
2、复合赋值运算符-=产生的值是对象的更新值;但该泛型函数返回值是原子对象的先前值。
参数:
volatile A *object
指向原子类型对象的指针。
M operand
与参数object指向原子对象值相减的操作数。如果参数object是原子整数类型,参数operand为对应的非原子类型;如果参数object是原子指针类型,参数operand为ptrdiff_t类型。
返回值:
函数返回函数调用生效前参数object指向的原子对象值。
范例:
|
|
输出:
aNumber: -100000
aValue: -100000
number: -86024
number的值应大于或者等于-100000,不一定就是-86024。自增运算和自减运算是不是原子操作取决于操作数,如果操作数是原子对象,则是原子操作;如果操作数不是原子对象,则不是原子操作。
注:使用Pelles C编译。
相关内容:
atomic_fetch_add | 原子加运算函数。 |
atomic_fetch_sub_explicit | 原子减运算函数。 |
atomic_fetch_or | 原子按位或运算函数。 |
atomic_fetch_xor | 原子按位异或运算函数。 |
atomic_fetch_and | 原子按位与运算函数。 |