[英]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.