您的位置:首页 > 运维架构 > Linux

Linux的原子操作

2019-08-04 20:32 1796 查看

程序的操作序列:

  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函数接受(就是对于需要原子操作的独立出一个路径来)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Atomic Linux