CPU实现原子操作的方法

在学习并发编程时,我们知道,多条指令不被分割操作被成为原子操作。但是,对于CPU是如何保证原子性的呢。

1、对于单核CPU


对于单核cpu,所有的事件都是串行,执行完第一才会去执行第二个。所以,单核CPU实现原子操作比较简单。

在单核CPU中,每个指令都保证是原子的,即中断只会在指令之间发生。Intel x86指令集支持内存操作数的inc操作,将多条指令的操作在一条指令内完成。因为进程的上下文切换是在总是在一条指令执行完成后,所以不会写撕裂或者读撕裂等并发问题。

2、对于多核CPU


对于多核CPU,保证单条指令并不能解决并发问题,因为多个核心可能同时运行同一个赋值语句。

1、使用总线锁

总线锁用来锁住某一个共享内存。当一个cpu要对内存进行操作时,会加上总线锁,限制其他cpu对共享内存操作。Intel x86指令集提供了指令前缀lock用于锁定前端串行总线(FSB),保证了指令执行时不会受到其他处理器的干扰。

2、使用缓存锁

使用总线锁,会锁定cpu与内存的通信,所以开销很大。有的cpu架构提供开销更小的缓存锁。缓存锁在一个cpu进行回写时,会使用缓存一致性机制来保护内部内存,当其他处理器回写已被锁定的缓存行的数据时会起缓存行无效。

3、CAS

CAS(Compare and Swap),cas记录原来内存中的值old,和将要修改的值new。CAS会检测现在内存中的值now,如果now和old一致,则说明没有别的cpu进行了内存修改,执行new值的更新。如果new和old值不等,则说明值已被修改,丢弃new值。

参考:https://infoq.cn/article/atomic-operation

https://www.cnblogs.com/fanzhidongyzby/p/3654855.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值