2011-12-10 70 views

回答

13

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); 
相關問題