多线程环境中的原子操作

什么原子操作

Atomic operations are performed in a single unit of task without interference from other operation。

原子操作就是不可再分的操作。换句话说,一个操作或者多个操作要么全部执行并且执行的过程中不会被任何因素打断,要么就都不执行。

怎么理解不可再分,在CPU层面, 它是原子性的

我们从一道试题说起

以下多线程对int型变量x的操作,哪几个需要进行同步:( )
A. x=y; B. x++; C. ++x; D. x=1;

什么操作需要同步进行的, 不是原子性操作,就需要同步。因为在多线程的环境中, 对非原子性操作不做同步处理,处理的结果就是未知的。
那上述哪些是原子操作呢
1. x=y
在CPU上它实际是两个操作,读取y至寄存器,再把值写入x。
它有两个原子性操作组成, 它本身不是原子操作。
- load eax, y
- store x, eax
2. x++和++x可以放在一起讨论
CPU会按3条指令的形式处理这种语句:
- 从内存读取x的值到寄存器中
- 对寄存器加1
- 再把新值写回x所处的内存地址
3. x=1
由硬件层面,提供原子性支持。

综上所述, 只有x=1是原子操作, 所以其它操作都需要同步。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值