У меня есть вилка, возникающая в цикле, а над вилкой я запрашиваю вход пользователя. В моем разветвленном процессе также есть печать. Поскольку нет гарантии того, что процессы будут запущены, я часто (или всегда) получаю линии от процесса дочернего процесса между моим приглашением пользователю и местом, где они могут вводить информацию.Подождите, пока часть детского процесса закончится?
Т.е., я получаю что-то вроде этого:
Enter info: <OUTPUT FROM CHILD>
_
(где _ означает, что пользователь может ввести вход.)
Поскольку я пытаюсь, чтобы мой родительский процесс fork many children (каждый из которых основан на части информации, предоставленной пользователем), которая выполняется одновременно, я не могу дождаться, когда ребенок закончится, прежде чем позволить родителям продолжить работу. Есть ли способ заставить родителя ждать, пока часть ребенка завершится, прежде чем двигаться дальше?
Вы считаете использование семафоров? если да, то почему вы решили против них и что еще вы пробовали? – UnholySheep
@ UnholySheep Я действительно сделал. Я попробовал установить флаг, и родитель подождал, пока ребенок не будет установлен в 1 (продолжая, если флаг не был 1), но на второй итерации программа перестает отвечать. При печати флага я видел, что он не менялся (он печатал 0). Поэтому по какой-то причине он пытается выполнить родительский элемент и не будет выполнять две строки дочернего элемента, к которому я бы хотел вернуться, прежде чем вернуться к родительскому элементу. –
Если у вас есть этот код, вы можете попробовать открыть новый вопрос об этом, возможно, мы сможем помочь вам решить проблему. Я лично не могу придумать лучшего варианта использования семафоров для вашей проблемы, но, возможно, у кого-то еще будет решение для вас – UnholySheep