在Linux设备驱动程序中。当它引入自旋锁时,它给出了以下示例:
您的驱动程序正在执行,并刚刚取出一个控制锁 访问其设备。锁定时,设备会发出锁定 中断,导致中断处理程序运行。中断 处理程序,在访问设备之前,还必须获得锁。 在中断处理程序中取出一个自旋锁是合法的 做;这是自旋锁操作不睡觉的原因之一。 但是如果中断例程在同一个程序中执行会发生什么 处理器作为最初取出锁的代码?虽然 中断处理程序正在旋转,非中断代码将无法执行 运行以释放锁定。那个处理器将永远旋转。
如何解决这个问题?使用信号量?请帮忙。
答案 0 :(得分:3)
您使用非中断代码中的 spin_lock_irqsave
来禁用当前核心上的硬件中断,或使用“替代锁定”中描述的任何工具部分在同一章节中。
不记得那里的确切细节,但理论是:
希望这有帮助。