3
給定一個進程或線程的任務結構,迭代屬於同一進程的所有其他線程的習慣用法是什麼?內核:如何從進程的task_struct中找到所有線程?
給定一個進程或線程的任務結構,迭代屬於同一進程的所有其他線程的習慣用法是什麼?內核:如何從進程的task_struct中找到所有線程?
Linux不區分進程(任務)和線程。庫調用fork()和pthread_create()使用相同的系統調用clone()。 fork()和pthread_create()之間的區別是傳遞給clone()的位掩碼。該位掩碼描述了哪些資源(內存,文件,文件系統,信號處理程序等)。有關詳細信息,請參閱man clone(2)。
無論如何,有一個稱爲線程組的clone()調用的特殊標誌,它指示新進程屬於同一個線程組。此機制通常用於將所有使用指定CLONE_THREAD的clone()創建的任務保留在位掩碼中。 對於此線程,sched.h包含文件中存在macro * while_each_thread *。它是這樣使用的:
struct task_struct *me = current();
struct task_stuct *t = me;
do {
whatever(t);
}while_each_thread(me, t);