будет ли работать этот параллельный поток? - PullRequest
0 голосов
/ 28 января 2012

Я пытаюсь добавить компонент параллельной обработки в однопотоковую однопроцессную программу.Я только изучаю некоторые методы многопроцессорной обработки и поэтому не совсем уверен в их возможностях.

Логика программы, которую я ищу, чтобы реализовать:

  • основной процесс вызываетфункция.
    • вызывает функцию fork () в начале цикла for.
      • дочерний процесс продолжает работу с функцией, выполняя другие подфункции или выходя обратно на основе проверок времени.
    • тем временем родительский цикл заканчивается первым для цикла цикла и начинается снова, таким образом-подбивание второго потомка.
  • функция продолжается до тех пор, пока цикл for не завершится после выполнения примерно 10 fork ().
  • функция вызывается снова после завершения на основетаймер более высокого уровня.

Будет ли работать эта реализация?Пример кода:

check_timer() {
   for(i = 0; i < 10; i++) {
      pid_t pid = fork();
      if(pid == 0) {
         execute child 1 checks and possible executes..
         exit(); // when completed
      }
      else {
         parent maybe does something or just ends first round of for loop..
      }
   }
some implementation of wait(); to wait for all children to finish before leaving check_timer() function..
}

Создаст ли это одновременно до 10 дочерних процессов, выполняющихся в фоновом режиме родителя, который затем ожидает завершения дочерних процессов?Также были бы полезны некоторые советы по использованию wait ().

1 Ответ

2 голосов
/ 28 января 2012

Да, в итоге у вас будет 11 процессов.

Скорее всего, вам нужна функция waitpid, вызываемая до тех пор, пока не останется дочерних элементов (возврат ECHILD).

РЕДАКТИРОВАТЬ: только что заметил, что вам нужно pid_t pid = fork();, а не pid = pid();

...