【发布时间】:2011-10-24 04:02:58
【问题描述】:
据我所知,自旋锁应该在短时间内使用,并且只是代码中的选择,例如不允许休眠(抢占)的中断处理程序。
但是,我不知道为什么会有这样一个“规则”,即在持有自旋锁时根本不应该睡觉。我知道这不是推荐的做法(因为它不利于性能),但我认为没有理由不应该在自旋锁中允许休眠。
在获取信号量时不能持有自旋锁,因为在等待信号量时可能需要休眠,并且在持有自旋锁时不能休眠(来自 Robert Love 的“Linux Kernel Development”)。
我能看到的唯一原因是出于可移植性的原因,因为在单处理器中,自旋锁被实现为禁用中断,通过禁用中断,当然不允许休眠(但休眠不会破坏 SMP 系统中的代码)。
但我想知道我的推理是否正确,或者是否还有其他原因。
【问题讨论】:
-
你说的这条规则是什么?
-
我刚刚从我的问题出现的一本书中添加了一个块引用。
-
这在我看来就像是特定于 Linux 内核开发的东西。如果您正在谈论 Linux 内核开发,请相应地标记问题。
标签: c synchronization linux-kernel sleep spinlock