你真的知道 原子操作吗?

在阅读本文章前,先抛出一个问题

如何在不加锁的情况下保证数据的原子性? 原子操作

什么是原子操作

原子操作,表示这个动作/操作是原子性的,是不可被打断或分割的动作。

  • 当然,程序级别的原子操作可以是加锁->使用->解锁,这个过程也可以说是原子操作
  • 那软件级别的原子操作指的是,依赖于硬件以及系统的支持下,使用原子变量以及原子操作的API来对数据进行的操作。比如使用atomic指定原子变量,或者使用系统API提供的原子操作API函数

下文中的原子操作范指软件级的原子操作

原子操作是如何实现的

原子操作的出现其实依赖于 CPU硬件,也就是计算机硬件和系统的支持。见往期文章 中央处理器中的技术

原子操作的必要条件

硬件和操作系统(甚至编译器)的支持。为什么?

  • 看过文章之后,不难理解要实现原子操作首先硬件要支持总线LOCK#或支持缓存一致性规则
  • 其次,要在高级语言(除汇编外)使用原子操作,也必须依赖系统和编译器支持,系统或接口中要有相应API,编译器也要认识你写的这些调用

思考

在 C++11 新特性中提到了 atomic,可以对类型指定为原子变量,那么你知道什么类型的变量可以被指定为原子变量吗?

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值