我刚刚开始在 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");
}
}
现在据我对这个问题的结论(我可能是错的)是线程t1 and t2由内核创建并运行,然后程序返回循环开始处创建并运行另外两个线程。由于没有条件等待这些线程完成,内核创建了如此多的线程,从而导致堆栈溢出。
我只想知道如何让程序等待这两个线程完成,然后返回循环启动另外两个线程。
任何帮助,将不胜感激。
/* Wait for kthread_stop */
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
schedule();
set_current_state(TASK_INTERRUPTIBLE);
}
查看这篇文章了解更多信息:《沉睡在内核》.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)