对于这种情况:进程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
答案 0 :(得分:2)
在您提供的情况下,进程B 将忙等待,直到其片段结束并重新安排到进程A 发生。因此,整个时间片将浪费时间。
如果从进程B 切换到进程A 从未发生,情况可能会更糟。例如,如果进程B 的优先级超过进程A 之一。在这种情况下,它是死锁。
禁用spin_lock
中的抢占可以防止上述浪费时间和死锁。