我正在关注 Linux 设备驱动程序。当它引入自旋锁时,它给出了以下示例:
您的驱动程序正在执行并且刚刚取出一个控制对其设备的访问的锁。当锁被持有时,设备会发出一个中断,这会导致你的中断处理程序运行。中断处理程序在访问设备之前也必须获得锁。在中断处理程序中取出自旋锁是合法的事情。这是自旋锁操作不休眠的原因之一。但是如果中断例程与最初取出锁的代码在同一个处理器中执行会发生什么?当中断处理程序正在旋转时,非中断代码将无法运行以释放锁。该处理器将永远旋转。
我不明白为什么如果中断处理程序正在旋转,则无法执行非中断代码。
是不是因为中断处理程序中的例程不能被抢占?如果是这样,是不是说中断例程必须是原子的?