Правильный способ обработки потоков в ядре?

Я видел повсюду разбросанную информацию, но, похоже, не могу найти окончательного ответа. Как вы очищаете зомби нить в ядре?

Просто для того, чтобы убедиться и выработать окончательный правильный способ обработки потоков в ядре, я хотел бы задать этот вопрос более широко.How do you create, terminate and clean up a thread in the Linux kernel?

То, что у меня так далеко, это:

<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>

Самое близкое, что я нашел к решению для очистки, этоrelease_task, но я нигде не говорил об этом. Я представлял себе, так как функции потокаkthread_create, kthread_run и т. д., должно бытьkthread_join или жеkthread_wait, но не было.do_wait также представляется вероятным, но это не займетstruct task_struct *.

Кроме того, я не уверен, еслиdo_exit это хорошая идея, или если вообще необходимо. Может кто-нибудь придумать минимальный набросок того, как kthread должен быть создан, завершен и очищен?

Ответы на вопрос(1)

Ваш ответ на вопрос