Назначать новые задачи для процессов forked () - PullRequest
0 голосов
/ 14 июня 2019

Мне нужно создать многопроцессную программу, которая:

  1. Создает 5 процессов, используя fork();
  2. Отправляет материал для выполнения дочерних процессов, используя каналы
  3. Когда дочерний процесс завершает свою работу, он должен получать новую работу от родительского процесса, пока все вещи не будут завершены.

Сейчас моя идея состоит в том, чтобы wait() выполнить завершенные дочерние задачи (и он завершается), а затем создать новый дочерний процесс, чтобы у меня всегда было максимум 5 процессов.

Есть ли способ "повторно использовать" уже существующий процесс? Может, что-то "сигнализирует"? Не могу найти его в Google.

Использование C.

1 Ответ

0 голосов
/ 30 июня 2019

Я решил свою проблему следующим образом:

  • Дети записывают результат своего расчета на трубу А (эта труба не блокируется). Затем они ждут своего следующего ввода на трубе B (эта труба блокируется).

  • Родительский цикл зацикливается на всех дочерних элементах, пытающихся что-то прочитать из канала А (этот канал не блокируется, поэтому родительский объект продолжается, если дочерний элемент ничего не отправлял). Если канал A содержит результат, родитель отправляет этому дочернему элементу еще одну задачу по каналу B.

Для каждого ребенка есть труба A и труба B.

...