繁体   English   中英

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

[英]Creating multiple child processes running parallel

我是这个孩子父进程的新手。 和id喜欢创建一个Master和3个slave。 那些都是一样的吗? 如果我创建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 */

}

您需要删除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);
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM