私は、次のカーネルスレッド機能がある場合:カーネルスレッドから戻る場合、kthread_stopを使用する必要がありますか?
int thread_fn() {
printk(KERN_INFO "In thread1");
return 0;
}
を私はまだここkthread_stop()
機能を使用する必要がありますか?
スレッド機能のreturn
は、カーネルスレッドの停止と終了を行いますか?
私は、次のカーネルスレッド機能がある場合:カーネルスレッドから戻る場合、kthread_stopを使用する必要がありますか?
int thread_fn() {
printk(KERN_INFO "In thread1");
return 0;
}
を私はまだここkthread_stop()
機能を使用する必要がありますか?
スレッド機能のreturn
は、カーネルスレッドの停止と終了を行いますか?
kthread()
がimplementedであることを見ると、209行目でthreadfn(data)
がコールされ、終了コードがret
に格納されます。 do_exit(ret)
を呼び出します。
threadfn
からの簡単な返信で十分です。
あなたがkthread_stopの文書を見れば、それはそれと言っている:
kthread_should_stop
がtrueを返すように。これは、kthread_stop()
がスレッドを停止するためにスレッドの外側からのみ呼び出されることを意味します。スレッドが終了するのを待つので、スレッド内でこれを呼び出さないでください。デッドロックする可能性があります。
また、ドキュメントには、スレッドが終了する必要があることだけが通知され、スレッドはkthread_should_stop
を呼び出してこれについて調べる必要があります。
int thread_fn() {
printk(KERN_INFO "In thread1");
while (!kthread_should_stop()) {
get_some_work_to_do_or_block();
if (have_work_to_do())
do_work();
}
return 0;
}
をしかし、あなたの関数がkthread_should_stop
を呼び出し、長寿命でない場合は必要ありません:だから長寿命threadfn
はこれを行う可能性があります。
私は、スレッドを開始するコードを見て、スレッドのスタックが返されたアドレスが返ってきたかどうかを調べると分かります。 –