C++ 库 - <stdatomic>



C++ 中的<stdatomic> 头文件提供了一组函数,用于对共享变量执行原子操作,从而实现对数据的线程安全操作。此头文件是并发支持库的一部分。

<stdatomic> 头文件将 atomic_flag 类型定义为结构类型(提供经典的 test-and-set 功能),具有两种状态:设置和清除。

包含 <stdatomic> 头文件

要在你的 C++ 程序中包含 <stdatomic> 头文件,可以使用以下语法。

#include <stdatomic>

<stdatomic> 头文件的函数

以下是 <stdatomic> 头文件中所有函数的列表。

路径操作函数

这些路径操作函数对文件路径进行操作,以组合、转换或解析它们。

序号 函数及描述
1 atomic_is_lock_free

此函数检查原子类型的操作是否为无锁的。

2 atomic_store, atomic_store_explicit

这些函数以原子方式将原子对象的值替换为非原子参数。

3 atomic_exchange, atomic_exchange_explicit

这些函数以原子方式将原子对象的值替换为非原子参数,并返回原子的旧值。

4 atomic_fetch_add, atomic_fetch_add_explicit

这些函数将非原子值添加到原子对象,并获取原子的先前值。

5 atomic_fetch_sub, atomic_fetch_sub_explicit

这些函数将原子对象替换为与非原子参数按位与的结果,并获取原子的先前值。

6 atomic_fetch_or, atomic_fetch_or_explict

这些函数将原子对象替换为与非原子参数按位或的结果,并获取原子的先前值。

7 atomic_fetch_xor, atomic_fetch_xor_explict

这些函数将原子对象替换为与非原子参数按位异或的结果,并获取原子的先前值。

8 atomic_flag_test_and_set, atomic_flag_test_and_set_explicit

这些函数以原子方式将标志的值设置为 false。

9 atomic_thread_fence

此函数提供通用的依赖于内存顺序的栅栏同步原语。

10 atomic_signal_fence

此函数在同一线程中执行的线程和信号处理程序之间设置栅栏。

检查操作是否为无锁的

在下面的示例中,我们将使用 atomic_is_lock_free 来检查特定原子类型上的原子操作是否为无锁的。

#include <iostream>
#include <atomic>
int main() {
    std::atomic<int> atomicInt;
    bool isLockFree = atomic_is_lock_free(&atomicInt);
    std::cout << "Is atomic operation lock-free? " << std::boolalpha << isLockFree << std::endl;
    return 0;
}

输出

如果我们运行上面的代码,它将生成以下输出:

Is atomic operation lock-free? true
广告