Linux核心多執行緒實現方法
阿新 • • 發佈:2019-01-13
參考:http://blog.csdn.net/sharecode/article/details/40076951
1.建立執行緒方法1
kthread_create: 建立執行緒;改函式建立執行緒後,不會馬上執行
wake_up_process():啟用執行緒執行
struct task_struct *kthread_create(int (*threadfn)(void *data),void *data,const char *namefmt, ...);
//注意,第二個引數data用於向執行緒傳遞引數;執行緒建立後,不會馬上執行,而是需要將kthread_create() 返回的task_struct指標傳給wake_up_process(),然後通過此函式執行執行緒.
例項:
struct task_struct *ktask;
ktask = kthread_create(test_thread, &parm1, "ktask1");
if (IS_ERR(ktask)) {
err = PTR_ERR(ktask);
printk( "cannot spawn ktask1,error %d\n", err);
goto out;
}
wake_up_process(ktask);
test_thread 實現:
int test_thread(void *data){
…
while(1){
set_current_state(TASK_UNINTERRUPTIBLE);
if(kthread_should_stop()) break;
if(){//條件為真
//進行業務處理
}
else{//條件為假
//讓出CPU執行其他執行緒,並在指定的時間內重新被排程
schedule_timeout(HZ);
}
}
…
return 0;
}