首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux内核--我可以在不同的函数中锁定和解锁自旋锁吗?

Linux内核--我可以在不同的函数中锁定和解锁自旋锁吗?
EN

Stack Overflow用户
提问于 2013-11-04 04:41:55
回答 2查看 1.6K关注 0票数 3

我对内核编程和使用锁编程很陌生。

在不同的功能中锁定和解锁自旋锁安全吗?我这样做是为了同步代码流。

另外,在__schedule()中使用自旋锁(锁和解锁)安全吗?让调度程序等待获取锁安全吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-05 10:09:40

而不是spinlock,您可以使用semaphoremutex。对于最小的一组操作,您应该在同一个函数中使用spinlock

票数 0
EN

Stack Overflow用户

发布于 2014-03-15 13:09:25

如果您的代码设计正确,从多个位置获取和释放相同的自旋锁是无害的,事实上,这就是关键所在;您可以使用单个自旋锁来实现一组类似于Linux atomic操作的函数,但需要使用任何额外的内部复杂性。只要在每个函数中获得并释放围绕共享资源的锁,它就会正常工作。

主要考虑因素是:

  1. 保持每个声明/发布对之间的代码尽可能简短&这是一个原子上下文
  2. 这将很好地工作在一个单一的核心系统和规模,以先发制人的SMP。
  3. 您仍然需要考虑您正在实现的代码类型和它可能运行的上下文,并为此使用正确的自旋锁类型。

只要您小心地处理自旋锁--记住死锁的潜力--并且了解您在自旋锁中所做的任何事情都会影响系统延迟,那么它们就是一个非常有用的工具。

如果您知道代码中声称锁的所有区域总是完成并快速释放,那么您可以同样确信,您的代码中的任何其他部分都不会在等待锁的时间内旋转。这可能比使用互斥锁更有效。

接受自旋锁的另一个价值是它充当一个隐式内存屏障,因此,通过在操作某些资源(例如结构的一个成员)周围设置一个锁,您可以确保代码中的任何其他线程在读取/写入该资源之前也会获取锁,以查看该资源的当前状态,而不是某些由于缓存一致性问题而过时的值。

这是一个潜在的复杂问题,但希望这一解释能有所帮助。

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

https://stackoverflow.com/questions/19761757

复制
相关文章

相似问题

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