Je viens de commencer la programmation sur les threads du noyau Linux. J'ai un problème que je voudrais partager avec vous les gars. Mon code est:Comment attendre qu'un thread de noyau Linux (kthread) sorte?
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");
}
}
Maintenant, pour autant que je conclus à ce problème (je peux me tromper) est que les fils t1 et t2 sont créées et exécutées par le noyau et le programme retourne à la début de la boucle pour créer et exécuter deux autres threads. Comme il n'y a aucune condition à attendre pour que ces threads se terminent, le noyau crée autant de threads provoquant ainsi un débordement de pile. Tout ce que je veux, c'est savoir comment faire en sorte que le programme attende que ces deux threads se terminent, puis recommence la boucle en commençant deux autres threads.
Toute aide serait appréciée.
Mon processus de création de thread est un module noyau. Dois-je mettre ce module dans une file d'attente? –
Non, vous mettez des threads dans la file d'attente. Je vous disais simplement le mécanisme général pour gérer ce genre de problème. Vous devez savoir dans quel contexte fonctionne la fonction appelante et trouver une solution en conséquence. – Sudhanshu