为什么spin_lock应该禁用preempt?如果不禁用抢占会发生什么事情?

时间:2017-02-28 01:47:56

标签: kernel spinlock preemption

对于这种情况:进程B将等待进程A释放旋转,所以preemt OK ???     Process A: -->spin lock --> do strict call --> before unlock time int     Time int ISR: --> Process A time slice finished --> need schedule -->ISR ret --> schedule to Process B     Process B: -->spin lock for same resource --> failed --> spin wait

1 个答案:

答案 0 :(得分:2)

在您提供的情况下,进程B 忙等待,直到其片段结束并重新安排到进程A 发生。因此,整个时间片浪费时间

如果从进程B 切换到进程A 从未发生,情况可能会更糟。例如,如果进程B 的优先级超过进程A 之一。在这种情况下,它是死锁

禁用spin_lock中的抢占可以防止上述浪费时间和死锁。