Я новичок в этом дочерних родительских процессов. И я хотел бы создать Мастера и 3 рабов. Это одно и то же? Если бы я создал 3 детей, это было бы как 3 раба? Мой другой вопрос будет, я уже создал 3 ребенка. Но я твердо верю, что эти дочерние процессы не работают параллельно. Я должен заставить их работать параллельно. Я считаю, что это цикл не позволяет это? Как иначе можно реализовать три подчиненных, работающих параллельно, и в произвольном порядке они заканчивают свою работу? То, как я это реализовал, всегда идет как раб 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);
}
Других решений пока нет …