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 都是自减后的新值
相关推荐
超级码力6664 小时前
【Latex文件架构】Latex文件架构模板
算法·数学建模·信息可视化
ZC跨境爬虫4 小时前
跟着 MDN 学 HTML day_9:(信件语义标记)
前端·css·笔记·ui·html
穿条秋裤到处跑4 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
Merlos_wind5 小时前
HashMap详解
算法·哈希算法·散列表
汉克老师5 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
OBiO20137 小时前
Cell | 突破AAV载体容量限制!路中华/姜玉武/刘太安团队开发AAVLINK系统实现大基因递送
笔记
Yzzz-F7 小时前
Problem - 2205D - Codeforces
算法
智者知已应修善业8 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
Halo_tjn8 小时前
Java Set集合相关知识点
java·开发语言·算法
sakiko_9 小时前
UIKit学习笔记5-使用UITableView制作聊天页面
笔记·学习·swift·uikit