Предполагая, что вы имеете в виду интерфейс передачи сообщений, наилучший подход - записать выходные строки в буфер и отправить их процессу с рангом 0. Этот процесс следует использовать не для выполнения реальной работы, а только для фильтрации и вывода выходных строк.
Оставьте другие ряды, чтобы выполнять настоящую работу. Я не думаю, что ваше решение будет работать, потому что я локальный для каждого ранга.
Вы также не хотите использовать обмен сообщениями для остановки отдельных рангов (пока они не смогут выводить данные), поскольку они не смогут выполнять свою сортировочную работу в это время.
Просто пусть каждый ранг с 1 по N выполняет свою работу и отправляет строки на ранг 0. Строки могут иметь форму "NNN:SSSSSS"
, где N - ранг, а S - строка. Затем ранг 0 может отфильтровывать определенные сообщения или записывать разные сообщения в разные файлы, а затем объединять их (сортировать) после закрытия всех рабочих рангов.