创建并行运行的多个子进程

时间:2015-10-28 17:02:26

标签: c++ process parent master slave

我是这个子父进程的新手。并且喜欢创建一个Master和3个奴隶。这些是一回事吗?如果我创造3个孩子,它会像3个奴隶吗?我的另一个问题是我已经创造了3个孩子。但我坚信这些子进程并不是并行的。我必须使它们并行运行。我相信这个for循环是不允许的?如何以其他方式实现并行运行的三个从属服务器,他们正在完成工作?我实现它的方式,总是像奴隶1完成,然后奴隶2完成。但我的教授问我,他们应该能够以随机顺序完成。我认为我的代码子进程在前一个子代码完成时会创建另一个子进程。

for(int i=0; i<3; i++){

    pid_t slave = fork();
    if (slave==0) /* only execute this if child */
        {
                std::cout << "Slave " << i+1 << ": ";

                switch(i+1){
                    case 1 :
                            std::cout << "Project statistics" << std::endl; 
                        break;
                    case 2 :
                            std::cout << "Midterm statistics" << std::endl;
                        break;
                    case 3 :
                            std::cout << "Final statistics" << std::endl;
                        break;
                    default :
                            std::cout << "Something Went Wrong" << std::endl;
                }           

                foo("Child");
                std::cout << "Slave " << i+1 << ": Done" << std::endl;
                exit(0);

        }
        wait(&status);  /* only the parent waits */

}

1 个答案:

答案 0 :(得分:0)

你需要移除wait(&status)才能使它同时工作(这将为孩子产生另一个孩子之前)。然后添加到另一个循环以获取状态。

即。代码应该是

for (int i=0; i<3; i++) {
   pid_t slave = fork();
   if (slave==0) /* only execute this if child */
   {
     std::cout << "Slave " << i+1 << ": ";

     switch (i+1) {
       case 1 :
         std::cout << "Project statistics" << std::endl; 
         break;
       case 2 :
         std::cout << "Midterm statistics" << std::endl;
         break;
       case 3 :
         std::cout << "Final statistics" << std::endl;
         break;
       default :
         std::cout << "Something Went Wrong" << std::endl;
     }           
     foo("Child");
     std::cout << "Slave " << i+1 << ": Done" << std::endl;
     exit(0);
   }
 }
 for (int i=0; i<3; i++) {
    wait(&status);
 }