atomic笔记

atomic笔记

C++ 中实现原子操作、解决多线程数据竞争的核心工具

初始化

cpp 复制代码
// 直接初始化(推荐)
std::atomic<int> a2(10);

// 赋值初始化(C++17 后支持)
std::atomic<int> a3 = 20;

读 store

cpp 复制代码
// 写操作:两种方式等价
num.store(10); // 显式写(推荐,可指定内存序,后面讲)
num = 20;      // 隐式写(等价于 num.store(20))

写 load

cpp 复制代码
// 读操作:两种方式等价
int val1 = num.load(); // 显式读
int val2 = num;        // 隐式读

改 exchange

cpp 复制代码
std::atomic<int> num(10);
// 准备要替换的新值
int new_val = 20;
// 执行原子交换:返回旧值,同时将num设为新值
int old_val = num.exchange(new_val);

判断是否改变

cpp 复制代码
std::atomic<int> value(true); // 等价于 value = 1
int new_val = false;          // 等价于 new_val = 0
if (value.exchange(new_val) != new_val) {
    std::cout << "变量已改变" << std::endl; // 会执行这行
} else {
    std::cout << "变量未改变" << std::endl;
}

自增 fetch_add ++ 与 自减 fetch_sub --

原子操作 等价写法 核心一致点
auto temp = num++; auto temp = num.fetch_add(1); temp 都是自增前的旧值
auto temp = ++num; auto temp = num.fetch_add(1) + 1; temp 都是自增后的新值
auto temp = num--; auto temp = num.fetch_sub(1); temp 都是自减前的旧值
auto temp = --num; auto temp = num.fetch_sub(1) - 1; temp 都是自减后的新值
相关推荐
库玛西30 分钟前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
qeen872 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
lucas_AI2 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
民乐团扒谱机3 小时前
【微实验】倒谱算法(Cepstrum)深度解析:原理、数学推导与代码实现
人工智能·算法·语音识别
Nil2084 小时前
leetcode 189轮转数组
数据结构·算法·leetcode
-dzk-4 小时前
【动态规划】LC 118.杨辉三角
算法·动态规划
恣逍信点4 小时前
《凌微经》静态自悖——变化之自因
人工智能·科技·算法·机器学习·业界资讯·拓扑学·哲学
吃着火锅x唱着歌4 小时前
LeetCode 3885.设计事件管理器
算法·leetcode·职场和发展
后季暖4 小时前
langgraph笔记(2)&& fastapi笔记
笔记