国产探花免费观看_亚洲丰满少妇自慰呻吟_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

主站蜘蛛池模板: 临潭县| 平阳县| 敦煌市| 三江| 翼城县| 旌德县| 江油市| 汝南县| 峡江县| 保山市| 平舆县| 邹平县| 即墨市| 永仁县| 德庆县| 惠州市| 凤山市| 碌曲县| 社旗县| 沭阳县| 若尔盖县| 南川市| 安义县| 伊春市| 三江| 双江| 宜黄县| 舟山市| 湘阴县| 康马县| 泽库县| 邵阳县| 尉氏县| 聊城市| 杭锦旗| 望城县| 汝城县| 泾源县| 宁国市| 承德市| 平邑县|