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

why spin_lock should disable preempt? if not disable preempt what will happend?

对于这种情况:进程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

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

如果永远不会从 进程 B 切换到 进程 A,情况可能会更糟。例如,如果 进程 B 的优先级高于 进程 A。在那种情况下它是死锁

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