<分区>
Possible Duplicate:
Why can't you sleep while holding spinlock?
据我所知,自旋锁应该在短时间内使用,并且只是在不允许休眠(抢占)的中断处理程序等代码中的选择。
但是,我不知道为什么会有这样的“规则”,即持有自旋锁时根本不应该休眠。我知道这不是推荐的做法(因为它不利于性能),但我看不出为什么在自旋锁中不应该允许 sleep 。
You cannot hold a spin lock while you acquire a semaphore, because you might have to sleep while waiting for the semaphore, and you cannot sleep while holding a spin lock (from "Linux Kernel Development" by Robert Love).
我能看到的唯一原因是出于可移植性的原因,因为在单处理器中,自旋锁被实现为禁用中断,通过禁用中断,休眠当然是不允许的(但休眠不会破坏 SMP 系统中的代码)。
但我想知道我的推理是否正确,或者是否还有其他原因。