Я только что начал программирование на потоках ядра Linux. У меня есть проблема, с которой я хотел бы поделиться с вами, ребята. Мой код:Как дождаться окончания потока ядра Linux (kthread)?
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 создаются и управляются ядром, а затем программа возвращается на начало цикла для создания и запуска еще двух потоков. Поскольку нет условия ждать завершения этих потоков, ядро создает так много потоков, что приводит к переполнению стека.
Все, что я хочу, это знать, как заставить программу ждать завершения этих двух потоков, а затем вернуться к циклу, начиная с двух других потоков.
Любая помощь будет оценена по достоинству.
Процесс создания потоков - это модуль ядра. Должен ли я помещать этот модуль в очередь ожидания? –
Нет, вы помещаете потоки в очередь ожидания. Я просто рассказывал вам об общем механизме решения этой проблемы. Вам нужно выяснить, в каком контексте работает call_function, и придумать решение соответствующим образом. – Sudhanshu