n 中断处理程序可以抢占内核中的所有程序(当没有锁保护时),包括软中断,tasklet,bottom half和系统的调用、内核线程,甚至也包括硬中断处理程序。也就是说中断处理程序可以和这些所有的内核任务并发执行,如果被抢占的程序和中断处理程序都要访问同一个资源,就必然有可能产生竞争。
n 软件中断也可以抢占内核中的所有任务,所以内核代码(比如,系统调用、内核线程等)中有数据和软中断共享,就会有竞争――除此外硬件中断处理程序也有可能被软中断打断,条件是硬中断被其它硬中断打断,软中断随即便获得了执行机会,因为软中断是跟在硬中断后执行的。此外要注意的是,软中断即使是同种类型的也可以并发地运行在不同处理器上,所以它们之间共享数据都会产生竞争。(如果在同一个处理器上,软中断之间是不能相互抢占的)。
n 同类的tasklet不可能同时运行,所以对于同类tasklet之间是串行运行的,他们不会产生并发;但两个不同种类的tasklet有可能在不同处理器上并发运行,如果之间有数据共享就会产生竞争(在同一个处理器上运行的tasklet不发生相互抢占的情况)。
n Bottom half 无论是否是同类的,即使在不同处理器上也都不能并发执行,它是绝对串行化的,所以它们之间永远不能产生竞争。任务列队属性基本同BH。
n 系统调用和内核线程这种运行在进程上下文中的内核任务可能和各种内核任务并发,除了上面提到的中断(软,硬)来抢占它而产生并发外,它也有可能自发性地主动睡眠(比如在一些阻塞性的操作中),放弃处理器,重新调度其它任务,所以系统调用和内核线程除会与软硬中断(半底等)发生竞争,也会与其他(包括自己)系统调用与内核线程发生竞争。我们尤其要注意这种情况。