2011-12-10 8 views

答えて

13

Linuxはプロセス(タスク)とスレッドを区別しません。ライブラリ呼び出しfork()とpthread_create()は同じシステムコールclone()を使用します。 fork()とpthread_create()の違いは、clone()に渡されるビットマスクです。このビットマスクは、どのリソース(メモリ、ファイル、ファイルシステム、シグナルハンドラなど)を記述します。詳細については、man clone(2)を参照してください。

とにかく、新しいプロセスが同じスレッドグループに属することを示すclone()呼び出しにスレッドグループと特別なフラグと呼ばれるものがあります。このメカニズムは、通常、ビットマスクにCLONE_THREADを指定してclone()で作成されたすべてのタスクをまとめて保持するために使用されます。 このスレッドには、sched.hインクルードファイルにマクロ* while_each_thread *が存在します。これは次のように使用されます:

struct task_struct *me = current(); 
struct task_stuct *t = me; 
do { 
    whatever(t); 
}while_each_thread(me, t); 
関連する問題