linux 核心多執行緒程式設計

2021-07-08 15:40:38 字數 2048 閱讀 3956

建立並啟動乙個核心執行緒.

*/#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 ...