建立並啟動乙個核心執行緒.
*/#define kthread_run(threadfn, data, namefmt, ...) \
()/**
返回should_stop 標誌,
看一下kthread_stop()原始碼
int kthread_stop(struct task_struct *k)
...*/int kthread_should_stop(void)
/** 二號程序
該函式主要做了 :
1 : 遍歷鍊錶 kthread_create_list
如果為空 : 讓出cpu,休眠
2 : 如果不為空: 從鍊錶中取出來,建立核心程序
*/int kthreadd(void *unused)
/**忽略所有的訊號
*/ignore_signals(tsk);
flush_signals(t);
}....
/**死迴圈
*/for(;;)
/**如果該執行緒被喚醒、或者上面的條件不成立,
那麼就設定該執行緒的狀態為task_running
*/__set_current_state(task_running);
spin_lock(&kthread_create_lock);
/**判斷kthread_create_list是否為空
如果不為空,會進入這個while迴圈,會建立核心執行緒
*/while (!list_empty(&kthread_create_list))
}spin_lock(&kthread_create_lock);
}spin_unlock(&kthread_create_lock);
}return0;}
/** 該函式主要做了兩件事情 :
1 : 構造了乙個kthread_create_info 結構體,將其掛接到 kthread_create_list鍊錶上
2 : 喚醒 核心執行緒kthreadd ,讓其建立核心執行緒
*/struct task_struct *kthread_create(int (*threadfn)(void *data),void *data,const
char namefmt,...)
*/ create.threadfn = threadfn;
create.data = data;
/**初始化完成量
*/init_completion(&create.done);
spin_lock(&kthread_create_lock);
/**將kthread_create_info新增到 kthread_create_list鍊錶上。
kthread_create()建立的核心程序請求資訊都會掛接在這個鍊錶上。
*/list_add_tail(&create.list, &kthread_create_list);
spin_unlock(&kthread_create_lock);
/**喚醒核心執行緒kthreadd
pid = kernel_thread(kthreadd, null, clone_fs | clone_files);
kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
*/wake_up_process(kthreadd_task);
/**等待核心執行緒kthreadd建立核心執行緒完成
*/wait_for_completion(&create.done);
if (!is_err(create.result))
return create.result;
}
Linux核心多執行緒(三)
接上一篇文章,這裡介紹另一種執行緒間通訊的方式 completion機制。completion機制是執行緒間通訊的一種輕量級機制 允許乙個執行緒告訴另乙個執行緒工作已經完成。為使用 completion,需要包含標頭檔案 可以通過以下方式來建立乙個 completion declare comple...
Linux 多執行緒程式設計
1.建立執行緒和退出的函式原型 int pthread create pthread t thread,pthread attr t attr,void start routine void void arg pthread exit 0 其他還有很多相關的函式。2.編譯時要加上 lpthread ...
Linux多執行緒程式設計
linux 多執行緒程式設計 多執行緒支援 posix 執行緒介面,稱為 pthread,pthread create 用來建立執行緒,pthread join 等待執行緒結束,函式的原型分別如下 extern int pthread create p pthread t thread,const ...