Linux的原子操作

程序的操作序列:

  1. 读一个位于memory中的变量的值到寄存器中。
  2. 修改该变量的值(就是修改寄存器中的值)。
  3. 将寄存器中的值写回memory中的变量值。

如果这个操作是串型化操作,那么一切都ok,然后在多cpu体系下,运行两个cou上的两个内核控制路径同时并行执行上面操作序列,可能发生读写顺序改变。

多个cpu和memory chip是通过总线互联的,任意时刻只能有一个总线master设备访问该设备。 因此两个cpu读memory操作被串型执行,分别获得相同的旧值,完成修改后,两个cpu都想写回必须是串型的,这样cpu1先写回的值可能被cpu2写回时覆盖掉,因此结果是错误的。

在单cpu上由于多个内核控制路径交错导致同样的错误。

对于那些多个内核控制路径进行read-modify-write的变量,内核提供了特殊类型atomic_t。 内核定义若干atomic_xxx的接口api函数,这些函数只会接收atomic_t类型的参数。 这样确保atomic_t类型变量不会被那些普通的,非原子变量操作的api函数接受(就是对于需要原子操作的独立出一个路径来)。

转载于:https://my.oschina.net/u/1000241/blog/3083309

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值