atomic_fetch_or函数
概要:
#include <stdatomic.h> C atomic_fetch_or(volatile A *object, M operand);
描述:
该泛型函数将参数object指向的原子对象值与参数operand进行按位或运算,得到的结果替换参数object指向的原子对象值。该操作是原子的读-修改-写操作。该函数适用于原子整数类型对象,但不包括atomic_bool类型以及底层类型为bool的枚举类型的原子版本。
对于有符号整数类型,算术运算在整数溢出时执行安静绕回处理(silent wrap-around on overflow);不存在未定义结果。对于地址类型,结果可能是未定义地址,但操作没有未定义行为。
ISO/IEC 9899标准未指定atomic_fetch_or是宏还是具有外部链接的标识符。如果为访问实际函数而抑制宏定义,或者程序定义了与atomic_fetch_or同名的外部标识符,其行为是未定义的。
该泛型函数和复合赋值运算符|=几乎等价,区别主要在于:
1、复合赋值运算符|=不能保证是原子操作。复合赋值运算是不是原子操作取决于左操作数,如果左操作数是原子对象,则是原子操作;如果左操作数不是原子对象,则不是原子操作。
2、复合赋值运算符|=产生的值是对象的更新值;但该泛型函数返回值是原子对象的先前值。
参数:
volatile A *object
指向原子类型对象的指针。
M operand
与参数object指向原子对象值进行按位或运算的操作数。如果参数object指向对象是原子整数类型,参数operand为对应的非原子类型;如果参数object指向对象是原子指针类型,参数operand为ptrdiff_t类型。
返回值:
函数原子地返回函数调用生效前参数object指向的原子对象值。
范例:
|
|
输出:
Before operation
aNumber: 5
After operation
aNumber: 7
相关内容:
| atomic_fetch_add | 原子加运算函数。 |
| atomic_fetch_sub | 原子减运算函数。 |
| atomic_fetch_or_explicit | 原子按位或运算函数。 |
| atomic_fetch_xor | 原子按位异或运算函数。 |
| atomic_fetch_and | 原子按位与运算函数。 |
主要参考资料: