Właściwy sposób obsługi wątków w jądrze?
Widziałem wszędzie fragmenty rozproszonych informacji, ale nie mogę uzyskać jednej ostatecznej odpowiedzi. Jak wyczyścić wątek zombie w jądrze?
Aby się upewnić i stworzyć ostateczny poprawny sposób obsługi wątków w jądrze, chciałbym zadać to pytanie szerzej.Jak tworzyć, kończyć i czyścić wątek w jądrze Linux?
Do tej pory mam to:
<code>thread_func: exited = 0; while (!must_exit) do stuff exited = 1; do_exit(0) init_module: must_exit = 0; exited = 1; kthread_run(thread_func, ...) /* creates and runs the thread */ cleanup_module: must_exit = 1; while (!exited) set_current_state(TASK_INTERRUPTIBLE); msleep(1); /* How do I cleanup? */ </code>
Najbliższą rzeczą, jaką znalazłem w rozwiązaniu czyszczącym, jestrelease_task, ale nie znalazłem nigdzie o tym mówić. Wyobrażałem sobie, że funkcje wątku sąkthread_create
, kthread_run
itp., powinno byćkthread_join
lubkthread_wait
, ale nie było.do_wait
również wydawało się prawdopodobne, ale nie wymagastruct task_struct *
.
Ponadto nie jestem pewien, czydo_exit
jest dobrym pomysłem, a jeśli to konieczne, koniecznym. Czy ktoś może wymyślić minimalny szkic tego, jak należy utworzyć, zakończyć i wyczyścić kthread?