当前位置: C语言 -- 标准库 -- <stdatomic.h> -- atomic_exchange

atomic_exchange函数


概要:
#include <stdatomic.h>
C atomic_exchange(volatile A *object, C desired);

描述:

该泛型函数使用参数desired的值替换参数object指向的原子对象值,并返回该操作生效前原子对象的值。该操作是原子的读-修改-写操作。

ISO/IEC 9899标准未指定atomic_exchange是宏还是具有外部链接的标识符。如果为访问实际函数而抑制宏定义,或者程序定义了与atomic_exchange同名的外部标识符,其行为是未定义的。


参数:
volatile A *object

指向原子类型对象的指针。

C desired

对应的非原子类型对象。


返回值:

该函数原子地返回函数调用生效前参数object指向的原子对象值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
/*函数atomic_exchange范例*/

#ifdef __STDC_NO_ATOMICS__
#error "Implementation does not support atomic types."
#endif

#include <stdatomic.h>
#include <stdio.h>

int main(void)
{
    atomic_int aNumber;
    atomic_init(&aNumber, 10);

    printf("Before exchange aNumber is %d.\n", atomic_exchange(&aNumber, 25));
    printf("After exchange aNumber is %d.\n", atomic_load(&aNumber));
    
    return 0;
}


输出:

Before exchange aNumber is 10.

After exchange aNumber is 25.


相关内容:
atomic_store 写入原子对象值的函数。
atomic_load 读取原子对象值的函数。
atomic_exchange_explicit 读取并替换原子对象值的函数。
atomic_compare_exchange_strong 根据比较结果,更新值的函数。
atomic_compare_exchange_weak 根据比较结果,更新值的函数。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018