Linux的原子操作

本文探讨了在多CPU体系下,原子操作的重要性及其在内核控制路径中的应用。详细解释了原子变量atomic_t如何避免多核并发时的读写顺序混乱,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序的操作序列:

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值