http://hi.baidu.com/dayanhn/item/f52242ca3a16fa12505058e7
看了这篇文章差不多明白了一点,就是加入两个CPU同时执行两组spin_lock_irq1和spin_lock_irq2
假如spin_unlock_irq1先执行,那么被spin_lock_irq2保护的区域实际上中断已经打开。
但是我有点没搞明白,irqsave为什么可以保证两个irqrestore不会互相干涉,是否因为cli/sti是针对中断管理器,只有一个。
而irqsave保存的是EFLAGS寄存器,每个CPU有一个,所以不同CPU的不同进程执行的结果只影响自身。
但是这也解释不同,因为irqsave把CPU1的EFLAGS寄存器中断位置零了,而CPU2却没有,不是照样可以进入死锁吗?
恩,还要搞搞清楚。