2015-10-28 4 views
0

Я новичок в этих дочерних родительских процессах. И id как создать Мастер и 3 раба. Это то же самое? Если я создам 3 ребенка, это будет как 3 раба? Еще мой вопрос: я уже создал 3 ребенка. Но я твердо верю, что эти дочерние процессы не работают параллельно. Я должен заставить их работать параллельно. Я считаю, что для цикла это не позволяет? Как другим способом я могу реализовать три подчиненных устройства, работающих параллельно и в случайном порядке, они заканчивают работу? То, как я это воспринял, всегда идет, как раб 1, закончил, затем раб 2 закончил. Но мой профессор спрашивает меня, что они должны быть в состоянии закончить в случайном порядке. Я думаю, что мои дочерние процессы кодов создают другой дочерний элемент, когда выполняется предыдущий код childs.Создание нескольких дочерних процессов, выполняющихся параллельно

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

Я должен заставить их работать параллельно .... что работа планировщика – basav

+0

есть ли определенный порядок, который вы хотите наложить? – basav

+0

Нет, что я имел в виду. Процессы должны проходить параллельно. Если работа первых процессов больше, чем вторая и третья, тогда второй и третий процесс должны заканчиваться первым. Затем первый, закончив свою работу, должен закончить. Это зависит только от рабочей нагрузки. В этом для цикла i believ это только позволяет создать второй процесс, когда первый процесс будет выполнен. – hfakar

ответ

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

Я пробовал это, но он просто выполняет работу в обратном порядке. вместо одного cout на одном процессе я написал 4 couts. Таким образом, выход LAVE 3: Итоговые статистика Итоговые статистика Итоговые статистика Итоговые статистика Я Младенец Мой ПИД-: 70967 моего родителя PID: 70964 Ведомый 3: Статистика Среднесрочные статистика Среднесрочные статистика Среднесрочные: Совершено Ведомый 2 статистика Среднесрочные Я младенец Мой ПИД-: 70966 моего родителя PID: 70964 Ведомый 2: Совершено Подчиненный 1: статистика проекта статистика проекта статистика проекта статистика проекта Я младенец Мой ПИД-: 70965 моего родителя pid: 70964 Slave 1: Выполнено Мастер: Закончите – hfakar

+0

Он работает параллельно - только что планировщик дал каждому ребенку достаточно времени, чтобы завершить его до сдачи. Попробуйте заставить ребенка сделать что-то не так простое. –

+0

Ну ладно. Теперь я понял вашу мысль. Спасибо. Но как насчет отношения подчиненных рабов? То, что мы реализуем, - это один мастер и три раба? или один родительский процесс и 3 дочерних процесса? – hfakar

Смежные вопросы