原子操作与C++Atomic原子变量理解

什么是原子操作?

一个不可被中断的操作,即一个操作在执行过程中不会被其他线程干扰或中断,保证了对共享变量在多线程环境下的一致性。

作用:用来实现并发编程中的同步机制,避免出现竞态条件。

单核处理器中断实现原子操作:一个线程是运行在核心里面的,双核四核心能运行四个线程,线程运行在核心。线程运行的代码在内存,单处理器单核要保证原子操作,只需要在开始执行一套指令(一条C++语句可能被编译成多个指令实现)时,关闭中断,指令执行完再打开中断即可。

写回策略:处理器运算出的变量,先查看缓存中是否存在,有就直接写缓存,并标记该数据为脏数据(还没有写到内存中的数据),不写到内存;如果缓存中没有,就定位一个缓存块(cache line),如果缓存块这个位置的数据是脏数据(内存没有缓存有),把脏数据写回内存,把运算结果写到缓存。

缓存失效(cache miss)和一致性问题?

答:缓存失效是因为共享变量被其他核心更新,那么此时缓存中的值就为无效;因为写回策略,新的值并没有更新到内存中出现缓存一致性问题。

两种方式实现缓存一致性:

  1. 总线加锁:当一个核心需要修改共享变量,则对总线发起加锁请求

  2. 总线嗅探:当某个核心修改缓存数据后,会给其他关注改数据的缓存通

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值