программный конвейерный семафор синхронизация Цель:
Исследовать методы и средства организации конвейерной обработки данных.
Задание на лабораторную работу:
Разработать в соответствии с вариантом задания программу, выполняющую конвейерную (поэтапную) обработку массива данных Исследовать поведение программы при использовании различных методов синхронизации (семафоры, событийные переменные) Проанализировать полученные результаты.
Ход работы
Конвейерная обработка данных применяется при решении сложных вычислительных задач, допускающих разбиение процесса решения на относительно независимые части. В этом случае выходные данные (результаты работы) очередного процесса являются входными данными следующего процесса и т. д. Соответственно, за счет параллельной обработки сокращается общее время решения задачи. Типовая схема конвейерной обработки выглядит следующим образом:
В нашем случае существует всего 4 процесса, один из которых является генератором. Генератор формирует массив из 1000 случайных элементов.
После этого первый процесс берёт этот массив из буфера генератора и производит над ним следующие действия:
- — формируется массив из 100 чисел;
- — каждому числу массива присваивается минимальное число из 10 по порядку чисел первоначального массива;
- — сформированный новый массив помещается в буфер 1 процесса.
После этого второй процесс берёт из буфера первого процесса исходный массив из 100 чисел и производит следующие действия:
- — формируется массив из 10 чисел;
- — каждому числу массива присваивается минимальное число из 10 по порядку чисел первоначального массива;
- — сформированный новый массив помещается в буфер 2 процесса.
После этого третий процесс берёт из буфера второго процесса исходный массив из 10 чисел и производит следующие действия:
— вывод на экран этих чисел.
Регулировку данных конвейерных вычислений будем производить при помощи уже известных нам семафоров. Для этого создадим пары семафоров. Открытый семафор с четным номером сигнализирует о том, что соответствующий буфер свободен для записи информации, открытый семафор с нечетным номером — соответствующий буфер заполнен и доступен для выборки. В таком случае текст программы будет следующим.