2016-03-31 2 views
5

私は、次のカーネルスレッド機能がある場合:カーネルスレッドから戻る場合、kthread_stopを使用する必要がありますか?

int thread_fn() { 
    printk(KERN_INFO "In thread1");  
    return 0; 
} 

を私はまだここkthread_stop()機能を使用する必要がありますか?

スレッド機能のreturnは、カーネルスレッドの停止と終了を行いますか?

+0

私は、スレッドを開始するコードを見て、スレッドのスタックが返されたアドレスが返ってきたかどうかを調べると分かります。 –

答えて

1

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はこれを行う可能性があります。

関連する問題