如果我们从内核线程返回,是否有必要使用kthread_stop?

5
如果我有以下内核线程函数:
int thread_fn() {
    printk(KERN_INFO "In thread1");    
    return 0;
}

我在这里还需要使用kthread_stop()函数吗?

如果在线程函数中使用return,是否会使内核线程停止并退出?


我猜你应该能够通过查看启动线程的代码并检查它是否使用一个合理的返回地址来设置线程的堆栈,从而判断出线程是否正常。 - Nate Eldredge
1个回答

2
如果您查看kthread()实现,在第209行它调用threadfn(data)并将退出代码存储在ret中;然后调用do_exit(ret)
因此,从threadfn中简单返回即可。
如果您查看kthread_stop的文档,它说:
  • 设置kthread_should_stop以返回true;
  • 唤醒线程;
  • 等待线程退出。
这意味着kthread_stop()只应从线程外部调用以停止线程。由于它等待线程完成,因此您不应在线程内部调用此函数,否则可能会死锁!
此外,文档还指出,它仅通知线程应该退出,并且线程应该调用kthread_should_stop来了解此情况。因此,长时间运行的threadfn可能会执行以下操作:
int thread_fn() {
    printk(KERN_INFO "In thread1");
    while (!kthread_should_stop()) {
        get_some_work_to_do_or_block();
        if (have_work_to_do())
            do_work();
    }
    return 0;
}

但是如果您的函数不是长期运行的,则不需要调用kthread_should_stop


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接