相关疑难解决方法(0)

为什么拿着螺旋锁时不允许"睡觉"?

可能重复:
为什么不能在抱着螺旋锁的情况下睡觉?

据我所知,自旋锁应该在短时间内使用,并且只能在代码中选择,例如中断处理程序,其中不允许休眠(抢占).

但是,我不知道为什么会出现这样的"规则",即拿着螺旋锁时根本不应该睡觉.我知道这不是推荐的做法(因为它对性能有害),但我认为没有理由为什么睡眠不应该被允许进入自旋锁.

获取信号量时无法保持自旋锁,因为在等待信号量时可能需要休眠,而且在持有自旋锁时无法入睡(来自Robert Love的"Linux内核开发").

我能看到的唯一原因是出于可移植性的原因,因为在单处理器中,自旋锁被实现为禁用中断,并且通过禁用中断,当然不允许休眠(但是休眠不会破坏SMP系统中的代码).

但我想知道我的推理是否正确或是否还有其他原因.

c synchronization sleep linux-kernel spinlock

7
推荐指数
2
解决办法
7066
查看次数

标签 统计

c ×1

linux-kernel ×1

sleep ×1

spinlock ×1

synchronization ×1