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

时间:2016-03-31 14:52:46

标签: c linux-kernel linux-device-driver embedded-linux

如果我有以下内核线程函数:

int thread_fn() {
    printk(KERN_INFO "In thread1");    
    return 0;
}

我还需要在这里使用kthread_stop()功能吗?

线程函数中的return是否会使内核线程停止并退出?

1 个答案:

答案 0 :(得分:1)

如果您查看kthread() implemented的方式,则在第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