3 лабораторные работы на c++
Необходимо сделать 3 лабораторные работы. Текст задания ниже, методички - в прикрепленных файлах. Везде по 2 задания, но нужно делать ТОЛЬКО задания под номером 2.
Приветствуется максимально простой и понятный код.
1) Напишите три программы, выполняющиеся параллельно и читающие один и тот же файл. Программа, которая хочет прочитать файл, должна передать другим программам запрос на разрешение операции и ожидать их ответа. Эти запросы программы передают через одну очередь сообщений. В запросе указываются: номер программы, которой посылается запрос, идентификатор локальной очереди, куда надо передать ответ и время посылки запроса. Начать выполнять операцию чтения файла программе разрешается только при условии получения ответов от двух других программ. Каждая программа перед отображением файла на экране должна вывести следующую информацию: номер программы и времена ответов, полученных от других программ.Программа, которая получила запрос от другой программы, должна реагировать следующим образом:
- если программа прочитала файл, то сразу передается ответ, он должен содержать номер отвечающей программы и время ответа;
- если файл не читался, то ответ передается только при условии, что время посылки запроса в сообщении меньше, чем время запроса на чтение у данной программы;Запросы, на которые ответы не были переданы, должны быть запомнены и после чтения файла обслужены.(лаб 8, задание 2. Задание 1 делать НЕ НУЖНО.)
2) Напишите две программы, которые работают параллельно и обмениваются массивом целых чисел через две общие разделяемые области. Через первую область первая программа передает массив второй программе. Через вторую область вторая программа возвращает первой программе массив, каждый элемент которого уменьшен на 1. Обе программы должна вывести получаемую последовательность чисел. Синхронизация работы программ должна осуществляться с помощью общих переменных, размещенных в разделяемой памяти.(лаб 9, задание 2. Задание 1 делать НЕ НУЖНО).
3) Напишите две программы, экземпляры которых запускаются параллельно и с разной частотой обращаются к общему файлу. Каждый процесс из первой группы (Писатель) пополняет файл определенной строкой символов и выводит ее на экран вместе с именем программы. Процессы второй группы (Читатели) считывают строки из файла и выводят их на экран при условии отсутствия ожидающих запись Писателей. Пока один Писатель записывает строку в файл, другим Писателям и всем Читателям запрещено обращение к файлу. Если Писатели не пишут в файл, то разрешается одновременная работа всех Читателей.Писатели должны ожидать, пока не закончат работу запущенные Читатели. Писатель заканчивает работу после того как выполнит N-кратную запись строки в файл. Работа Читателя завершается, когда он прочитал весь текущий файл. Синхронизация процессов должна выполняться с помощью семафоров.(лаб 10, задание 2. Задание 1 делать НЕ НУЖНО.)