atomic_compare_exchange_strong函数
概要:
#include <stdatomic.h> bool atomic_compare_exchange_strong(volatile A *object, C *expected, C desired);
描述:
该泛型函数原子地比较参数object指向原子对象的内存内容与参数expected指向对象的内存内容是否相等。如果相等,将使用参数desired的内存内容替换参数object指向原子对象的内存内容;如果不相等,将使用参数object指向原子对象的内存内容更新参数expected指向对象的内存内容。该操作是原子的读-修改-写操作。
(注:该操作常用于实现无锁数据结构或者自旋锁。该操作是CAS操作(Compare-And-Swap操作);CAS操作提供了一种非阻塞的同步机制,允许线程在不加锁的情况下安全地修改共享变量。)
atomic_compare_exchange_strong函数的效果等价于:
if(memcmp(object, expected, sizeof(*object)) == 0) memcpy(object, &desired, sizeof(*object)); else memcpy(expected, object, sizeof(*object));
ISO/IEC 9899标准未指定atomic_compare_exchange_strong是宏还是具有外部链接的标识符。如果为访问实际函数而抑制宏定义,或者程序定义了与atomic_compare_exchange_strong同名的外部标识符,其行为是未定义的。
参数:
volatile A *object
指向原子类型对象的指针。
C *expected
指向对应的非原子类型对象的指针。
C desired
对应的非原子类型对象。
返回值:
函数返回比较结果;如果参数object指向原子对象的内存内容与参数expected指向对象的内存内容相等,函数返回true;如果参数object指向原子对象的内存内容与参数expected指向对象的内存内容不相等,函数返回false。
范例:
|
|
输出:
aNumber: 90000
相关内容:
| atomic_store | 写入原子对象值的函数。 |
| atomic_load | 读取原子对象值的函数。 |
| atomic_exchange | 读取并替换原子对象值的函数。 |
| atomic_compare_exchange_strong_explicit | 根据比较结果,更新值的函数。 |
| atomic_compare_exchange_weak | 根据比较结果,更新值的函数。 |
主要参考资料: