我有以下代码,并试图了解由此将创建多少个进程和线程:
pid t pid;
pid = fork();
if (pid == 0) { /* child process */
fork();
thread create( . . .);
}
fork();
我认为它从if循环内的fork创建了2个线程。和8个过程?但我不确定那是否正确
最佳答案
实际上,应该有8个线程和6个进程。
下面的图表可以使您清楚:
1) after first fork():
|------------------- child of p0 [p1]
---|------------------- parent [p0]
2) after second fork():
|--------------- child of p1 [p2]
|---|--------------- [p1]
---|------------------- [p0]
3) after pthread_create():
----------- thread 1 of p2 [p2t1]
|---/----------- thread 0 of p2 [p2t0]
| ----------- thread 1 of p1 [p1t1]
|---|---/----------- thread 0 of p1 [p1t0]
---|------------------- [p0]
4) after third fork():
|------------ child of p2 [p5]
| ------ [p2t1]
|-|-----/------ [p2t0]
| |---------- child of p1 [p4]
| | ------ [p1t1]
|---|---|---/------ [p1t0]
| |------------ child of p0 [p3]
---|-----|------------ [p0]
重要:请记住,fork(2)调用仅克隆执行该线程的线程,因此进程4 [p4]只有一个线程(与进程5 [p5]相同)。
关于multithreading - 将创建多少个进程和线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15300830/