我最近从http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2下载了linux源代码。我在linux-2.6.34.1 \ Documentation文件夹中的spinlocks.txt文件中看到了以下段落。
“它 意味着如果你有一些代码
cli();
.. critical section ..
sti();
和另一个做
的序列spin_lock_irqsave(flags);
.. critical section ..
spin_unlock_irqrestore(flags);
然后它们不是相互排斥的,关键区域可能发生
同时在两个不同的CPU上。这本身很好,但是
关键区域最好对不同的事物至关重要(即它们
不能互相踩踏)。 “
如果某些代码使用cli()/ sti()并且相同代码的其他部分使用spin_lock_irqsave(flags)/ spin_unlock_irqrestore(flags),它们如何影响?
答案 0 :(得分:7)
这里的关键部分是“在两个不同的CPU上”。一些背景:
cli/sti
就足以防止IRQ处理程序弄乱了。spin_lock_irqsave()
和spin_unlock_irqrestore()
被发明的原因。