Создание нескольких дочерних процессов, работающих параллельно

Я новичок в этом дочерних родительских процессов. И я хотел бы создать Мастера и 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 */

}

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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]