1. 程式人生 > >kthread_should_stop()這個函式幹了什麼?

kthread_should_stop()這個函式幹了什麼?

kthread_should_stop()返回should_stop標誌。它用於建立的執行緒檢查結束標誌,並決定是否退出。執行緒完全可以在完成自己的工作後主動結束,不需等待should_stop標誌。
 
該函式定義在include/linux/kthread.h中,與其相關的還有:   
struct task_struct kthread_run(int (*threadfn)(void *data),  void *data,constchar namefmt[],...);
int kthread_stop(struct task_struct *k);
 
     kthread_run()負責核心執行緒的建立,引數包括入口函式 threadfn,引數data,執行緒名稱namefmt。可以看到執行緒的名字可以是類似sprintf方式組成的字串。如果實際看到 kthread.h檔案,就會發現kthread_run實際是一個巨集定義,它由kthread_create()和wake_up_process() 兩部分組成,這樣的好處是用kthread_run()建立的執行緒可以直接執行,使用方便。

     kthread_stop()負責結束建立的執行緒,引數是建立時返回的task_struct指標。kthread設定標誌should_stop,並等 待執行緒主動結束,返回執行緒的返回值。執行緒可能在kthread_stop()呼叫前就結束。(經過實際驗證,如果執行緒在kthread_stop()呼叫 之前就結束,之後kthread_stop()再呼叫會發生可怕地事情—呼叫kthread_stop()的程序crash!!之所以如此,是由於 kthread實現上的弊端,之後會專門寫文章講到)