概念
并发(Concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(Race Conditions)。
发生条件
主要的竞态发生在以下条件:
图中每一种颜色代表一种竞态情况,主要归结为三类:
- 进程与进程之间:单核上的抢占,多核上的SMP;
- 进程与中断之间:中断又包含了上半部与下半部,以及硬中断、软中断、Tasklet,中断总是能打断进程的执行流;
- 中断与中断之间:中断有可能被更高优先级的中断打断,多个中断之间也可能带来竞态;
竞态解决途径
解决竞态的问题途径是保证对共享资源的互斥访问,所谓互斥访问是指一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问。
访问共享资源的代码区域成为临界区(Critical Sections),中断屏蔽、原子操作、自旋锁、信号量,互斥体等是Linux设备驱动中可采用的互斥途径。