[TOC]

概述

文章参考:https://cplusplus.com/reference/atomic/atomic/atomic/

文章参考:https://blog.csdn.net/wanxuexiang/article/details/104280021

atomic头文件结构

<atomic>头文件:原子类型是封装了一个值的类型,它的访问保证不会导致数据的竞争,并且可以用于在不同的线程之间同步内存访问。

这个头声明了两个c++类,原子和atomic_flag,它实现了自包含类中的原子类型的所有特性。header还声明了整个C样式类型和函数与C中的原子支持兼容。

class
atomic 用于bool、整数和指针类型的原子类模板和特殊化 (类模板)
atomic_flag 无锁布尔原子类型(类)
Types
memory_order 为给定的原子操作定义内存排序约束(typedef)

atomic原子操作支持bool、int、char等数据数据类型,但是不支持浮点数类型 ,下表为基本数据类型、c-style支持的类型、对应的atomic类型

Typedefs
std::atomic_bool std::atomic
std::atomic_char std::atomic
std::atomic_schar std::atomic
std::atomic_uchar std::atomic
std::atomic_short std::atomic
std::atomic_ushort std::atomic
std::atomic_int std::atomic
std::atomic_uint std::atomic
std::atomic_long std::atomic
std::atomic_ulong std::atomic
std::atomic_llong std::atomic
std::atomic_ullong std::atomic
std::atomic_char16_t std::atomic
std::atomic_char32_t std::atomic
std::atomic_wchar_t std::atomic
std::atomic_int_least8_t std::atomic
std::atomic_uint_least8_t std::atomic
std::atomic_int_least16_t std::atomic
std::atomic_uint_least16_t std::atomic
std::atomic_int_least32_t std::atomic
std::atomic_uint_least32_t std::atomic
std::atomic_int_least64_t std::atomic
std::atomic_uint_least64_t std::atomic
std::atomic_int_fast8_t std::atomic
std::atomic_uint_fast8_t std::atomic
std::atomic_int_fast16_t std::atomic
std::atomic_uint_fast16_t std::atomic
std::atomic_int_fast32_t std::atomic
std::atomic_uint_fast32_t std::atomic
std::atomic_int_fast64_t std::atomic
std::atomic_uint_fast64_t std::atomic
std::atomic_intptr_t std::atomic
std::atomic_uintptr_t std::atomic
std::atomic_size_t std::atomic
std::atomic_ptrdiff_t std::atomic
std::atomic_intmax_t std::atomic
std::atomic_uintmax_t std::atomic
Functions
kill_dependency std::memory_order_consume依赖树中删除指定对象 (模版函数)
atomic_thread_fence 通用内存顺序依赖关系的隔离同步原语(函数)
atomic_signal_fence 在同一线程中执行的线程和信号处理程序之间的隔离(函数)
Functions for atomic objects (C-style) description
atomic_is_lock_free 检查原子类型的操作是否免锁的(函数模板)
atomic_store
atomic_store_explicit
使用非原子参数以原子方式替换原子对象的值(函数模板)
atomic_load
atomic_load_explicit
在原子对象中原子性地获取存储的值(函数模板)
atomic_exchange
atomic_exchange_explicit
原子性地用非原子参数替换原子对象的值,并返回原子的旧值。(函数模板)
atomic_compare_exchange_weak
atomic_compare_exchange_weak_explicit
atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
原子地比较原子对象和非原子参数的值,如果不相等,则执行原子交换,如果没有,就load atomic
atomic_fetch_add
atomic_fetch_add_explicit
向原子对象添加非原子值,并获取原子的前值(函数模板)
atomic_fetch_sub
atomic_fetch_sub_explicit
从原子对象中减去非原子值,并获得原子的前值(函数模板)
atomic_fetch_and
atomic_fetch_and_explicit
用逻辑结果和非原子参数替换原子对象,并获得原子的前值(函数模板)
atomic_fetch_or
atomic_fetch_or_explicit
用逻辑或非原子参数替换原子对象,并获得原子的前值(函数模板)
atomic_fetch_xor atomic_fetch_xor_explicit 用逻辑XOR和非原子参数替换原子对象,并获得原子的前值(函数模板)
Functions for atomic flags (C-style) description
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
原子地将flag设置为true并返回其先前的值 (函数)
atomic_flag_clear
atomic_flag_clear_explicit
原子地将flag设置成false(函数)
Preprocessor macros description
ATOMIC_VAR_INIT 静态存储时间的原子变量的常量初始化(宏)
ATOMIC_FLAG_INIT 初始化 std::atomic_flag为 false

Macro constants

1
2
3
4
5
6
7
8
9
10
11
// lock-free property
#define ATOMIC_BOOL_LOCK_FREE /*unspecified*/
#define ATOMIC_CHAR_LOCK_FREE /*unspecified*/
#define ATOMIC_CHAR16_T_LOCK_FREE /*unspecified*/
#define ATOMIC_CHAR32_T_LOCK_FREE /*unspecified*/
#define ATOMIC_WCHAR_T_LOCK_FREE /*unspecified*/
#define ATOMIC_SHORT_LOCK_FREE /*unspecified*/
#define ATOMIC_INT_LOCK_FREE /*unspecified*/
#define ATOMIC_LONG_LOCK_FREE /*unspecified*/
#define ATOMIC_LLONG_LOCK_FREE /*unspecified*/
#define ATOMIC_POINTER_LOCK_FREE /*unspecified*/