Предполагается, что работают два процесса, один из этих процессов производит данные, а другой эти данные принимает. Данные передаются блоками через общую область памяти. Эта общая область называется буфером и может иметь не более N блоков данных. Необходимо так синхронизировать работу этих процессов, чтобы выполнялись следующие условия:
· каждый блок данных можно послать только один раз;
· блоки данных не могут быть потеряны – если в буфере содержится N блоков данных, то в него нельзя записывать новый блок данных;
· нельзя читать из пустого буфера.
Эти блоки данных называются сообщениями.
Для решения этой задачи объявляются три семафора:
· семафор s исключает одновременную работу процессов с общей областью;
· семафор full равен числу записанных и пока еще не прочитанных сообщений;
· семафор empty закрыт, когда в буфере нет места для записи.
Производитель должен перед записью ждать ненулевого значения empty, которое вначале устанавливается равным N. Затем вычитать от empty единицу, захватывать буфер с помощью семафора s, записывать данные, освобождать доступ к буферу и увеличивать число full записанных и не прочитанных на единицу. Потребитель ждет, пока не появится хотя бы одно сообщение, затем захватывает буфер, читает сообщение, освобождает буфер и увеличивает число свободных мест на единицу. Приведём схему программы:
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |