使用fork创建一个子打印a-z& c ++

时间:2015-10-13 19:10:35

标签: c++ process parallel-processing operating-system fork

我正在尝试使用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;
}

这段代码打印出问题是它首先对所有孩子做了什么,然后是父母。我认为它会同时创建两个并行运行的进程,然后它会打印出一些混合结果,其中一些将用于进程,而其他进程用于父进程等等。我的问题是,我认为程序在查看流程类型并进入该流程的循环并且在它打印出所有内容之前不会退出时会陷入循环

2 个答案:

答案 0 :(得分:3)

多线程/多进程程序本质上是不确定的。操作系统决定每个任务何时活动时间过长以及何时安排新任务,因此,特别是因为您的程序很短,孩子很有可能在父项获得之前完成执行有机会再次活跃,或反之亦然。

如果您希望程序交错这两个进程,您可以在循环内添加一个sleep语句来减慢它的速度并强制CPU更频繁地翻转。

如果您实际上期望程序在两者之间精确且均匀地交替,那么您需要使用互斥锁或删除多线程。

答案 1 :(得分:-1)

使用fork()创建一个子进程和父进程,并且该子进程应打印否。从10到1,并且父进程应打印一个阶乘号。