Linux的原子操作
2019-08-04 20:32
1796 查看
程序的操作序列:
- 读一个位于memory中的变量的值到寄存器中。
- 修改该变量的值(就是修改寄存器中的值)。
- 将寄存器中的值写回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函数接受(就是对于需要原子操作的独立出一个路径来)。
相关文章推荐
- linux驱动开发--字符设备:原子操作
- Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作
- linux并发控制之原子操作
- Linux 原子操作
- linux学习笔记4--原子操作
- arm驱动程序——按键程序6_互斥1—原子操作(韦东山的视频总结及针对linux-2.6.30)
- linux内核的原子操作
- Linux 原子操作
- Linux 原子操作
- Linux的原子操作与同步机制
- linux编程之原子操作
- Linux驱动的并发处理---原子操作
- linux gcc原子操作
- Linux原子操作
- Linux 设备驱动 ====> 并发控制 --- 原子操作
- 个人学习笔记---linux原子操作的实现原理
- Linux的原子操作以及LOCK前缀
- linux原子操作
- linux 原子整数操作详解
- Linux的原子操作与同步机制