Многопроцессное приложение для обработки изображений c ++ - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно написать программу, чтобы в интерактивном режиме выполнять простую обработку изображений. Программа (родительский процесс) сначала создает два сегмента разделяемой памяти для хранения входных и выходных изображений, а также третий сегмент совместно используемой памяти для связи со своими дочерними процессами. Давайте назовем эти сегменты входными, выходными и контрольными сегментами. Родительский процесс также создает набор семафоров для синхронизации. Затем родительский процесс разветвляется на четыре дочерних процесса. Пользователь вводит имя входного файла, имя выходного файла и целочисленное значение в диапазоне [–100, 100], указывающее запрошенный процент изменения яркости и контрастности входного изображения. Затем родительский процесс считывает входной файл с диска и сохраняет данные изображения во входном сегменте. Между тем, дочерние процессы ждут соответствующих семафоров.

Когда запись данных и связанных инструкций в управляющем сегменте завершается родительским процессом, он пробуждает дочерние процессы, каждый из которых работает с одной четвертой входных данных. изображение и записывает измененную часть изображения в выходной сегмент. Когда дочерние процессы работают с изображением, родительский процесс ожидает семафор. После завершения дочернего процесса он сигнализирует о родительском процессе и снова переходит в состояние ожидания. Когда родитель получает сигналы от всех четырех дочерних процессов, он просыпается и записывает выходное изображение в выходной файл, имя которого было предоставлено пользователем. Другое изображение обрабатывается аналогичным образом теми же дочерними процессами. Пользователь вводит выход, чтобы указать, что дальнейшее изображение не нужно обрабатывать. Затем родительский элемент передает инструкцию завершения дочерним процессам через управляющий сегмент. Когда все четыре дочерних процесса завершаются, родитель удаляет сегменты общей памяти и семафоры, созданные в начале, и завершает сам. Обратите внимание, что все взаимодействия между родительскими процессами и дочерними процессами могут использовать управляющий сегмент. Также допускается межпроцессное взаимодействие (например, каналы).

Я не имею ни малейшего представления о том, как заняться этим проектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...