首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的spin_lock_irqsave

嵌套的spin_lock_irqsave
EN

Stack Overflow用户
提问于 2012-09-25 21:42:34
回答 1查看 2.3K关注 0票数 6

如果代码如下

代码语言:javascript
复制
void test(void)
{
  spin_lock_irqsave(&lock1, flag);
  ...
  func1();
  ...
  spin_unlock_irqrestore(&lock1, flag);
}

void func1(void)
{
  spin_lock_irqsave(&lock2, flag);
  ...
  spin_unlock_irqrestore(&lock2, flag);
}

代码会有什么问题吗?在func1中调用spin_unlock_irqrestore时,是否已启用中断?我想要实现的是test()例程可以在没有任何调度器或中断的情况下执行。非常感谢

EN

回答 1

Stack Overflow用户

发布于 2012-09-25 23:41:00

就我在文档中找到的,而且我还没有完全穷尽我的搜索,flag将保存设置不同标志的位的状态,然后关闭中断,然后恢复它。如果中断已经被第一次调用test关闭,然后你再调用一次,我会假设(没有任何迹象表明我已经发现)它会关闭中断,存储flags并在func()中恢复它们,然后将它们恢复到flagtest中的状态。

只有在test函数完成后,才应重新启用中断。

我要说的是,您唯一需要注意的是,您不能在两个函数中使用相同的flag变量,否则您将在内部调用中覆盖第一个变量,然后重新设置它,如果在调用之间有任何标志发生更改,您可能会将外部变量重新设置为错误的状态。

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

https://stackoverflow.com/questions/12584240

复制
相关文章

相似问题

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