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 都是自减后的新值
相关推荐
Robot_Nav15 小时前
MPPI 局部规划器实验设计讲解
人工智能·算法·mppi
mingo_敏16 小时前
Mean-Teacher 均值教师自训练框架详解
算法·均值算法
llllliznc16 小时前
LLM 学习笔记 Day 5:Agent 核心组件——Planner、Memory 与 Reflection
笔记·学习
星空露珠16 小时前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
笨笨没好名字16 小时前
Leetcode刷题python3版第一周(下)
linux·算法·leetcode
risc12345616 小时前
“解决了什么痛点”与“为什么有这个东西”的关系?
笔记
hj28625116 小时前
Docker 容器化技术标准化笔记
java·笔记·docker
hyhsandy180317 小时前
STM32F103 TIM学习笔记
笔记·stm32·学习
手写码匠17 小时前
手写 LLM 安全护栏:从内容审核到越狱防御的完整实现
人工智能·深度学习·算法·aigc
栈溢出了17 小时前
Redis 消息队列笔记:List 与 Pub/Sub
redis·笔记·list