如何等待linux内核线程(kthread)退出?

Awa*_*ais 4 c linux-kernel

我刚刚开始在 Linux 内核线程上编程。我有一个问题想和大家分享。我的代码是:

void do_big_things(void *data)
{
   // do some really big things
} 
struct task_struct *t1;
struct task_struct *t2;

void calling_fucntion()
{
   for(j =0; j < 100; j++)
   {
      t1 = kthread_run(do_big_things, &data1, "thread1");
      t2 = kthread_run(do_big_things, &data2, "thread2");
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,我对这个问题的结论(我可能是错的)是线程t1t2是由内核创建和运行的,然后程序在循环开始时返回以创建并运行另外两个线程。由于没有条件等待这些线程完成,内核创建了如此多的线程从而导致堆栈溢出。

我只想知道如何让程序等待这两个线程完成,然后返回循环启动另外两个线程。

任何帮助,将不胜感激。

小智 5

/* Wait for kthread_stop */
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
    schedule();
    set_current_state(TASK_INTERRUPTIBLE);
}
Run Code Online (Sandbox Code Playgroud)

查看这篇文章了解更多信息:“在内核中休眠”