kk-并发控制和处理
- 什么是并发,竞态
- 竞态的解决方式
- 实际中如何灵活应用
- 并发(concurrency): 并发是指多个执行单元同时,并行的执行
- 竞态(race conditions): 并发的执行单元对共享资源(硬件资源(比如只有一个i2c,一个uart),全局变量等)的访问容易发生数据混乱
- 竞态发生的情况
## 什么是并发,竞态
1 对称多处理器(SMP)的多个CPU,smp是一种紧耦合,共享存储的系统模型,它的特点是多个CPU使用共同给的系统总线,因此可以访问共同的外设和存储器。(多个CPU可以粗略理解为多个线程)
2 单CPU内进程与抢占它的进程--2.6的内核支持抢占调度,一个进程在内核执行的时候可能被另一高优先级进程打断
3 中断(硬中断,软中断, tasklet,底半部)与进程之间:中断可以打断正在执行的进程,处理中断的程序和被打断的进程间也可能发生竞态,此外中断也可以被新的更高优先级的中断打断,因此,多个中断之间本身也可能引起并发而导致竞态。
## 竞态的解决方法
解决竞态问题的途径是保证对共享资源的互斥访问,访问共享资源的代码区称为临界区,临界区要互斥机制保护,linux设备驱动中常见的互斥机制有以下方式:中断屏蔽,原子操作,自旋锁,信号量
## 实际中如何灵活应用
1 中断屏蔽
1 基本概念:在单CPU中避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断,由于linux的异步I/O,进程调度等很多内容都依靠中断,所以我们应该尽快的执行完临界区的代码,换句话就是临界区代码应该尽量少
总结:
并发和竞态广泛存在,中断屏蔽,原子操作,自旋锁和信号量都是解决并发问题的机制,中断屏蔽很少单独被使用,原子操作只能针对整数进行,因此自旋锁和信号量应用最为广泛
http://www.cnblogs.com/wrjvszq/p/4286968.html?utm_source=tuicool&utm_medium=referral