首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解决自旋锁问题

解决自旋锁问题
EN

Stack Overflow用户
提问于 2012-05-30 12:27:13
回答 1查看 1.8K关注 0票数 2

在Linux设备驱动程序中。当它引入自旋锁时,它给出了以下示例:

您的驱动程序正在执行,并且刚刚取出一个控制对其设备的访问的锁。当锁被持有时,设备发出一个中断,这将导致您的中断处理程序运行。在访问设备之前,中断处理程序还必须获得锁。在中断处理程序中取出自旋锁是合法的;这是spinlock操作不休眠的原因之一。但是,如果中断例程与最初取出锁的代码在同一个处理器中执行,会发生什么情况呢?当中断处理程序正在旋转时,非中断代码将无法运行以释放锁。处理器会永远旋转。

如何解决这个问题?用信号灯?请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 14:36:38

您可以使用非中断代码中的spin_lock_irqsave来禁用当前核心上的硬件中断,或者使用同一章中“锁定”部分中描述的任何工具。

编辑0:

不记得确切的细节,但理论是:

在UP系统上,您根本不需要自旋锁--从访问与中断处理程序共享的数据的BH代码中禁用中断就足够了。在SMP系统中,需要自旋锁来保护自旋锁以防止在其他核上执行的相同BH代码的中断,如果您处理硬件,还希望禁用同一核上的中断以避免IRQ例程的死锁。

  • 中断处理程序总是需要禁用中断,同时保持任何锁以避免与自身发生锁定。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10816288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档