【发布时间】:2020-11-06 20:14:23
【问题描述】:
我是编程过程的新手,我的基本程序并没有像我预期的那样工作。我在 Oracle VM 上的 Ubuntu 18.04 上运行此代码。
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
printf("--beginning of program\n");
int counter = 0;
pid_t pid = fork();
if (pid == 0)
{
// child process
int i = 0;
for (; i < 5; ++i)
{
printf("child process: counter=%d\n", ++counter);
}
}
else if (pid > 0)
{
// parent process
int j = 0;
for (; j < 5; ++j)
{
printf("parent process: counter=%d\n", ++counter);
}
}
else
{
// fork failed
printf("fork() failed!\n");
return 1;
}
printf("--end of program--\n");
return 0;
}
这是我总是得到的结果:
--beginning of program
parent process: counter=1
parent process: counter=2
parent process: counter=3
parent process: counter=4
parent process: counter=5
--end of program--
--beginning of program
child process: counter=1
child process: counter=2
child process: counter=3
child process: counter=4
child process: counter=5
--end of program--
这是我编译程序的命令:
gcc main.c -o main
谢谢!
【问题讨论】:
-
尝试更多的迭代次数。打印 5 个字符串会很快发生。另请注意,
counter复制到fork。它不在进程之间共享。 -
这种行为并不比其他可能的行为更坏或更好。所以调度器决定让父进程在子进程运行之前完成是公平的。
-
如果每次打印后父母和孩子都睡一会儿,您可能会看到交错的输出。
-
你确定你收到了两次
--beginning of program吗?
标签: c parallel-processing multiple-processes