中断屏蔽
单cpu,在单cpu范围内避免竞态的简单方法是在进入临界区之前屏蔽系统的中断。cpu一般都具备屏蔽中断和打开中断
的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序抢占,防止某些竞态条件的发生。由于linux内核
的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也得以避免。
中断屏蔽的使用方法为:
local_irq_disable() //屏蔽中断
...
critical section //临界区
...
local_irq_enable() //开中断
由于linux的异步I/O,进程调度等很多重要操作都依赖于中断,中断对于内核的运行非常重要,在屏蔽中断期间所有的中
断都无法得到处理,因此长时间屏蔽中断是很危险的,有可能造成数据丢失乃至系统崩溃等后果。在就要求在屏蔽中断
之后,当前的内核执行路径应当尽快地执行完临界区的代码。
local_irq_disable()和local_irq_enable()只能屏蔽使能本cpu(单个cpu)的中断,因此不适合多cpu的竞态处理。因此
单独使用中断屏蔽通常不是一种值得推荐的避免竞态的方法,它适合于自旋锁联合使用。
与local_irq_disabl