IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++多线程:原子操作 -> 正文阅读

[C++知识库]c++多线程:原子操作

1、声明头文件

#include <atomic>         // std::atomic, std::atomic_flag, ATOMIC_FLAG_INIT

原子操作:
对一个变量的访问操作,原来会分为好几个指令,由于多线程程序中,可能会存在数据竞争,可能导致对变量的操作不是原子性,那么从编译实现角度,将原本几个指令的操作变成一个指令来执行,可以在无锁情况下实现原子操作,从而避免数据竞争。

std::atomic::atomic 
default (1)	
atomic() noexcept = default;
initialization (2)	
constexpr atomic (T val) noexcept;
copy [deleted] (3)	
atomic (const atomic&) = delete;
Construct atomic
Constructs an atomic object:

(1) default constructor
Leaves the atomic object in an uninitialized state.
An uninitialized atomic object may later be initialized by calling atomic_init.
(2) initialization constructor
Initializes the object with val.
(3) copy construction
Deleted (atomic objects cannot be copied/moved).

注意:
atomic不可拷贝和移动

2、函数

atomic::store

Modify contained value (public member function )
原子地修改容器中的值

atomic::load

Read contained value (public member function )
原子地读取容器中的值

std::atomic::compare_exchange_strong

bool compare_exchange_weak( T& expected, T desired,std::memory_order success,std::memory_order failure );

bool compare_exchange_weak( T& expected, T desired,std::memory_order success,std::memory_order failure ) volatile;

bool compare_exchange_weak( T& expected, T desired,std::memory_order order = std::memory_order_seq_cst );

bool compare_exchange_weak( T& expected, T desired,std::memory_order order = std::memory_order_seq_cst ) volatile;

bool compare_exchange_strong( T& expected, T desired,std::memory_order success,std::memory_order failure );

bool compare_exchange_strong( T& expected, T desired,std::memory_order success,std::memory_order failure ) volatile;

bool compare_exchange_strong( T& expected, T desired,std::memory_order order = std::memory_order_seq_cst );

bool compare_exchange_strong( T& expected, T desired,std::memory_order order =std::memory_order_seq_cst ) volatile;

expected-reference to the value expected to be found in the atomic object

desired-the value to store in the atomic object if it is as expected

success-the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted.

failure-the memory synchronization ordering for the load operation if the comparison fails. Cannot be std::memory_order_release or std::memory_order_acq_rel and cannot specify stronger ordering than success (until C++17)

order-the memory synchronization ordering for both operations

返回值:true如果成功地更改了基础原子值,false否则。

3、使用

std::atomic<int>  ai;
ai.store(3);
// tst_val != ai   ==>  tst_val is modified
exchanged= ai.compare_exchange_strong( tst_val, new_val );
// tst_val == ai   ==>  ai is modified
exchanged= ai.compare_exchange_strong( tst_val, new_val );  
  1. 当ai = 3时,ai不等于 tst_val, 将tst_val 的值设为3,返回false。
  2. 当ai= 3时,ai 等于tst_val, 将tst_val 的值设为new_val, 即将5赋值给ai,返回true。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:13:21  更:2022-03-15 22:15:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:28:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码