c++ 原子操作 赋值_原子操作原理

本文介绍了C++中的原子操作概念,强调其不可打断的特性,并详细讲解了原子赋值、读操作、加减操作的实现方式,以及在不同处理器架构(如SMP)上的优化策略。同时提到了一些其他相关原子操作函数的应用。
摘要由CSDN通过智能技术生成

bd5740e78da8a6296867ef02f35e7660.gif

1. 概念
原子操作是指不被打断的操作,即它是最小的执行单位。最简单的原子操作就是一条条的汇编指令(不包括一些伪指令,伪指令会被汇编器解释成多条汇编指令)。在 linux 中原子操作对应的数据结构为 atomic_t,定义如下:

typedef struct {
        int counter;} atomic_t;

本质上就是一个整型变量,之所以定义这么一个数据类型,是为了让原子操作函数只接受 atomic_t 类型的操作数,如果传入的不是 atomic_t 类型数据,在程序编译阶段就不会通过;另一个原因就是确保编译器不会对相应的值进行访问优化,确保对它的访问都是对内存的访问,而不是对寄存器的访问。2. 赋值操作
ARM 处理器有直接对内存地址进行赋值的指令(STR)。

#define atomic_set(v,i)    (((v)->counter) = (i))

3. 读操作
用 volatile 来防止编译器对变量访问的优化,确保是对内存的访问,而不是对寄存器的访问。

#d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值