我最近从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) ,它们会如何影响?