首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spin_lock和raw_spin_lock()有什么区别?

spin_lock和raw_spin_lock()有什么区别?
EN

Stack Overflow用户
提问于 2015-11-03 01:32:21
回答 2查看 5.8K关注 0票数 9

在linux内核中有每个自旋锁的原始变体,我想知道它的用法?例如:

raw_spin_lock()raw_spin_lock_irqsave()

EN

回答 2

Stack Overflow用户

发布于 2015-11-03 03:28:42

spin_lock*函数与raw_spin_lock*函数执行相同的操作,此外,当启用锁调试(CONFIG_DEBUG_LOCK_ALLOC)时,还会对锁操作执行一些额外的运行时检查,例如检查死锁。这些检查由lockdep子系统执行。

通常,只要可能,就应该使用spin_lock* 函数。

只有在非常棘手的锁定策略的极少数情况下,当lockdep可能产生错误警告时,才可以使用raw_spin_lock*函数。

此外,出于减少内存使用或性能的原因,raw_*函数可能比普通函数更可取。但它应该是实际的时间/空间测量,反映了使用这些优化的重大胜利。

票数 8
EN

Stack Overflow用户

发布于 2016-09-18 05:08:00

主要区别是spin_lock变体映射到非RT的raw_spin_lock变体,而如果设置了CONFIG_PREEMPT_RT,则它们映射到可以睡眠的rt_spin_lock

通过根据我们是否是RT将spin_lock从休眠和非休眠变化中解耦出来,spin_lock应用编程接口可以在内核代码中保持一致。

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

https://stackoverflow.com/questions/33483500

复制
相关文章

相似问题

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