国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

基于內核線程的創建、使用和退出以及延時宏的補充說明介紹

2020-01-26 16:18:12
字體:
來源:轉載
供稿:網友

相關函數:

kthread_create():創建內核線程

復制代碼 代碼如下:

struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[], ...);  kernel thread可以用kernel_thread創建,但是在執行函數里面必須用daemonize釋放資源并掛到init下,還需要用completion等待這一過程的完成。為了簡化操作,定義了kthread_create。

線程創建后,不會馬上運行,而是需要將kthread_create() 返回的task_struct指針傳給wake_up_process(),然后通過此函數運行線程。
 

kthread_run():創建并啟動線程的函數。

復制代碼 代碼如下:

struct task_struct *kthread_run(int (*threadfn)(void *data),void *data,const char *namefmt, ...);它實際上是個宏,由kthread_create()和wake_up_process()組成。

它實際上是個宏,由kthread_create()和wake_up_process()組成。
復制代碼 代碼如下:

#define kthread_run(threadfn, data, namefmt, ...)                     /

({                                                            /

    struct task_struct *__k                                        /

           = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); /

    if (!IS_ERR(__k))                                        /

           wake_up_process(__k);                                /

    __k;                                                     /

})


kthread_stop():通過發送信號給線程,使之退出。
復制代碼 代碼如下:

int kthread_stop(struct task_struct *thread);

線程一旦啟動起來后,會一直運行,除非該線程主動調用do_exit函數,或者其他的進程調用kthread_stop函數,結束線程的運行。
但如果線程函數正在處理一個非常重要的任務,它不會被中斷的。當然如果線程函數永遠不返回并且不檢查信號,它將永遠都不會停止。

同時,在調用kthread_stop函數時,線程函數不能已經運行結束。否則,kthread_stop函數會一直進行等待。

 

內核線程的一般框架

int threadfunc(void *data){

        …

        while(1){

               set_current_state(TASK_UNINTERRUPTIBLE);

               if(kthread_should_stop()) break;

               if(){//條件為真

                      //進行業務處理

               }

               else{//條件為假

                      //讓出CPU運行其他線程,并在指定的時間內重新被調度

                      schedule_timeout(HZ);

               }

        }

        …

        return 0;

}

 

線程相關測試命令

  可以使用top命令來查看線程(包括內核線程)的CPU利用率。命令如下:

    top

主站蜘蛛池模板: 台前县| 巴林左旗| 渝北区| 个旧市| 邢台市| 收藏| 稷山县| 平安县| 阜新市| 东兰县| 彭水| 刚察县| 宜宾县| 宿松县| 苏州市| 依安县| 乌兰察布市| 秀山| 徐州市| 大理市| 含山县| 光山县| 冀州市| 舞钢市| 拉萨市| 芦山县| 铜梁县| 年辖:市辖区| 祁阳县| 富民县| 灵武市| 鄂伦春自治旗| 山阴县| 论坛| 新泰市| 兰溪市| 汝州市| 章丘市| 措美县| 沅陵县| 兰溪市|