C++11并发编程之Atomic学习
[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_setatomic_flag_test_and_set_explicit | 原子地将flag设置为true并返回其先前的值 (函数) |
atomic_flag_clearatomic_flag_clear_explicit | 原子地将flag设置成false(函数) |
Preprocessor macros | description |
---|---|
ATOMIC_VAR_INIT | 静态存储时间的原子变量的常量初始化(宏) |
ATOMIC_FLAG_INIT | 初始化 std::atomic_flag为 false |
Macro constants
1 | // lock-free property |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus