【发布时间】:2016-01-11 16:19:47
【问题描述】:
我正在尝试使用 fork() 创建一个子进程,该子进程将以小写字母打印从 a 到 z 的字母,而父进程将打印大写字母的字母表。
#include <unistd.h>
#include <iostream>
using namespace std;
int main()
{
cout << "Program Begins" << endl;
char letter;
pid_t pid = fork();
if (pid == 0)
{
// child process
for (letter = 'a'; letter <= 'z'; letter++)
{
cout<< "child process: " << letter << endl;
}
}
else if (pid > 0)
{
// parent process
for (letter = 'A'; letter <= 'Z'; letter++)
{
cout << "parent process: " << letter << endl;
}
}
else
{
// fork failed
cout << "fork failed" << endl;
return 1;
}
cout << "End of Program\n" << endl;
return 0;
}
此代码打印出字母,问题是它先是子元素,然后是父元素。我认为它会同时创建两个彼此并行运行的进程,因此它将打印出一些混合结果,其中一些用于进程,而另一些用于父进程,依此类推。我的问题是我认为程序一旦查看进程类型并进入该进程的循环并且在打印出所有内容之前不会退出
【问题讨论】:
-
您无法保证操作系统将如何安排您的线程或进程。尝试在每次循环迭代中休眠一小段时间。
-
你有什么问题?
-
有可能一个在它被操作系统抢占之前完成了这个短循环,以便启动另一个。如果您使用更长的循环或在循环迭代之间添加延迟,您最终会看到两者并行运行。
-
std::thread让您可以更好地控制并行处理。
标签: c++ process parallel-processing operating-system fork