gpt4 book ai didi

c - 为什么当我在 Linux 内核中执行递归自旋锁时系统卡住

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:22 24 4
gpt4 key购买 nike

我知道 linux 内核不支持递归自旋锁,它会死锁。

我写了一个示例代码来查看行为,即使我有多个 CPU,系统也会卡住。这是预期的行为吗

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/spinlock.h>

MODULE_LICENSE("GPL");

DEFINE_SPINLOCK(my_lock);

static int __init test_hello_init(void)
{
spin_lock(&my_lock);
spin_lock(&my_lock);
pr_info("Starting critical region\n");
pr_info("Ending critical region\n");
spin_unlock(&my_lock);
return -1;
}

static void __exit test_hello_exit(void)
{
}

module_init(test_hello_init);
module_exit(test_hello_exit);

watchdog: BUG: soft lookup. - CPU stuck for 22s!

最佳答案

获取自旋锁可防止线程被抢占。因此 CPU 不会切换到另一个线程,直到给定线程释放它持有的所有自旋锁。

这正是错误信息的内容

BUG: soft lookup. - CPU stuck for 22s!

表示:CPU已经22秒没有切换了。

当 CPU 切换到其他线程时,它会执行操作系统工作所需的一些额外任务。这就是为什么不要将自旋锁(以及其他防止抢占的东西)保持太久至关重要。

关于c - 为什么当我在 Linux 内核中执行递归自旋锁时系统卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58037874/

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