Sau*_*gar 9 linux synchronization locking linux-kernel
linux内核中有每个自旋锁的原始变体,我想知道它的用法吗?例如:
raw_spin_lock(),raw_spin_lock_irqsave()等
spin_lock*函数与raw_spin_lock*1加上相同,当启用锁定调试(CONFIG_DEBUG_LOCK_ALLOC)时,对锁定操作执行一些额外的运行时检查,例如检查死锁.这些检查由lockdep子系统执行.
通常,spin_lock*只要有可能就应该使用函数.
只有在非常棘手的锁定策略的极少数情况下,何时lockdep可以产生错误警告,raw_spin_lock*可以使用函数.
此外,raw_*功能可以优于常用功能,以减少内存使用或性能原因.但它应该是实际的时间/空间测量,反映了使用这些优化的重大胜利.
主要区别是spin_lock变体映射到raw_spin_lock非 RT 的变体,而如果CONFIG_PREEMPT_RT设置,则它们映射到rt_spin_lock可以睡眠的变体。
通过根据我们是否为 RT 将 spin_lock 与睡眠与非睡眠变化解耦,spin_lock API 可以在整个内核代码中保持一致。