2020-12-10:i++是原子操作吗?为什么?

2020-12-10:i++是原子操作吗?为什么?

#福大大架构师每日一题#
全部评论
不是,大概可以看成三步 1.读取,2.运算,3.赋值 类似于   int j = i ;   // mov 操作 j + 1 ;  // inc 自增 i = j ;       // mov 1.读取,读取就可能不原子,比如32位的电脑读取64位的long double,long和double的长度都是8个字节,32位处理器对其读写操作无法一次完成。 解决方式 用volatile修饰 2. 运算,运算虽然有可能涉及很多个时钟周期,但是是原子性的 3. 赋值 ,跟1 一样。 解决方法  1. 加互斥锁 (Lock)-- 安全,性能影响很大 2. CAS (Atomic 类) -- 很快,可能有ABA问题
4 回复 分享
发布于 2020-12-11 06:11
不是,i++是多条指令结合的,先读取,再加,最后放回内存
4 回复 分享
发布于 2020-12-10 13:48

相关推荐

看起来名字可以很长:笑死 我暑期实习阿里云的意向也被 qq 邮箱放在垃圾箱了
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务