为什么 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
中禁用抢占可以防止上述时间浪费和死锁。
对于这种情况:进程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
中禁用抢占可以防止上述时间浪费和死锁。