gpt4 book ai didi

linux - 嵌套自旋锁_irqsave

转载 作者:IT王子 更新时间:2023-10-29 00:51:49 25 4
gpt4 key购买 nike

如果代码如下

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() 例程可以在没有任何调度程序中断或中断的情况下执行。非常感谢

最佳答案

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

只有在您的测试 函数之后才能重新启用中断。

我想说你唯一的问题是你不能在两个函数中使用相同的 flag 变量,否则你将覆盖内部调用中的第一个然后重置它,如果有任何标志在您的通话之间发生变化,您可能会将外部状态重置为错误状态。

关于linux - 嵌套自旋锁_irqsave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com