linux内核中有每个自旋锁的原始变体,我想知道它的用法吗?例如:raw_spin_lock()
,raw_spin_lock_irqsave()
等。
最佳答案
spin_lock*
函数与raw_spin_lock*
函数的功能相同,此外,启用锁调试后(CONFIG_DEBUG_LOCK_ALLOC),对锁操作执行一些其他的运行时检查,例如死锁检查。这些检查由lockdep
子系统执行。
通常,应尽可能使用 spin_lock*
函数。
仅在极棘手的锁定策略的极少数情况下,当lockdep
会产生错误警告时,才可以使用raw_spin_lock*
函数。
同样,为了减少内存使用或性能原因,raw_*
函数可能比普通函数更可取。但这应该是实际的时间/空间测量,反射(reflect)出使用这些优化所获得的重大 yield 。