[英]How to wait for a linux kernel thread (kthread)to exit?
我剛開始編寫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和t2是由內核創建並運行的,然后程序在循環開始時返回創建並運行另外兩個線程。 由於沒有條件等待這些線程完成,內核會創建如此多的線程,從而導致堆棧溢出。
我想要的是知道如何使程序等待這兩個線程完成然后返回循環開始另外兩個線程。
任何幫助,將不勝感激。
/* Wait for kthread_stop */
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
schedule();
set_current_state(TASK_INTERRUPTIBLE);
}
查看本文以獲取更多信息: “在內核中休眠” 。
這取決於你正在做什么,但你可能甚至不想開始自己的內核線程。
您可以使用schedule_work()
提交要在內核的全局工作隊列上運行的作業。
如果您使用自己的線程,通常將其編寫為圍繞kthread_should_stop()
的循環。 然后,希望線程終止的代碼調用kthread_stop()
,它告訴線程停止然后等待它停止。
你也可以去完成。 linux大容量存儲驅動程序http://lxr.free-electrons.com/source/drivers/usb/storage/usb.c具有非常好的kthreads實現。 祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.