以下C代码将生成多少个进程和线程?

问题描述 投票:0回答:2

请考虑以下用C语言编写的代码。在执行while(1);时,我们将分别具有多少个进程和线程?

int main(void) 
{
   int i;
   for (i=0; i<3; i++)
      fork();
   while(1);
}
c multithreading process
2个回答
0
投票

进程将始终具有主线程,否则它将无法将其自身调度到线程队列中,从而使物理处理器无法执行指令。

此外,您可以产生多少个进程/线程没有真正的限制,因为它受系统上内存量的限制。

您的以下代码,假设fork没有失败,除了您的父进程,将生成3个进程,每个进程1个线程

这意味着包括您的父进程,4个进程和4个线程。

请参阅David Schwartz回答


0
投票

一种简单的判断方法是在while(1)循环之前添加此行:

printf("I am process: %d, my parent is %d\n", (int) getpid(), (int) getppid());

示例输出:

我正在处理:4365,我的父母是8358我正在处理:4366,我的父母是4365我正在处理:4367,我的父母是4365我正在处理:4369,我的父母是4365我正在处理:4368,我的父母是4366我正在处理:4370,我的父母是4366我正在处理:4371,我的父母是4367我正在处理:4372,我的父母是4368

总共有8个进程,每个进程有一个线程。

发生了什么事? 8358是我的外壳。当我执行此代码时,它创建了进程4365。就是这样。

4365创建了三个进程,一个进程有两个要循环的循环(4366),一个进程有一个要循环的循环(4367),最后一个循环(4369)。那是另外三个,所以现在我们最多四个。

它创建的具有两个循环的循环(4366)创建了另外两个进程,一个进程具有一个循环要循环(4368),一个进程没有循环要循环(4370)。那是另外两个,所以现在我们最多六个。

我们还有两个进程需要一个循环,一个由第一个进程(4367)创建,另一个由第二个进程(4368)创建。每一个都创建一个新进程(4371和4372)。还有两个,所以现在我们到了8。

© www.soinside.com 2019 - 2024. All rights reserved.