首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spin_lock对spin_lock_irq和spin_lock_irqsave

spin_lock对spin_lock_irq和spin_lock_irqsave
EN

Unix & Linux用户
提问于 2019-05-15 07:03:10
回答 1查看 9.2K关注 0票数 7

在我目前忙于处理的内核中,有三个spin_lock函数。

  • spin_lock
  • spin_lock_irq
  • spin_lock_irqsave

我只发现只涉及其中两个的贡献(包括Linux文档)。

然后,答案或解释被表述成矛盾的或相互矛盾的,甚至包含评论,说解释是错误的。这使得很难得到一个概述。

我很清楚一些基本知识,例如在中断上下文中,一个简单的spin_lock()可能导致死锁。但我真的很想要一个关于这个主题的完整图片。

我要明白:

  • 什么时候或者我们应该使用哪个版本,什么时候不应该使用?
  • 什么时候不需要使用更安全的版本,但不影响(除了性能)?
  • 在特定情况下使用版本的原因是什么?
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-05-15 09:20:40

第五章简要描述了Linux设备驱动程序,第三版的并发性和种族条件。

代码语言:javascript
复制
void spin_lock(spinlock_t *lock);
void spin_lock_irqsave(spinlock_t *lock, unsigned long flags);
void spin_lock_irq(spinlock_t *lock);

spin_lock_irqsave在使用自旋锁之前禁用中断(仅在本地处理器上);以前的中断状态存储在flags中。如果您绝对确信您的处理器上没有任何其他的中断已经禁用(或者,换句话说,您确信您应该在释放自旋锁时启用中断),则可以使用spin_lock_irq,而不必跟踪这些标志。

如果您希望spinlock可以保持在中断上下文中,那么spin_lock_irq*函数是很重要的。原因是,如果自旋锁由本地CPU持有,然后本地CPU为中断提供服务,而中断也试图锁定自旋锁,则会出现死锁。

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

https://unix.stackexchange.com/questions/519009

复制
相关文章

相似问题

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