пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Семафоры и семафорные примитивы. Задача «поставщик-потребитель».

В общем о семафорах! см.билет№32
В задаче о поставщиках и потребителях поставщики посылают сообщения, получаемые 
потребителями. Процессы общаются через разделяемый буфер, выполняя либо операцию 
«поместить» либо операцию «извлечь». Операцию «поместить» выполняет процесс -поставщик, 
операцию «извлечь» - процесс потребитель. 
Необходимо запрограммировать работу процессов так, чтобы сообщения не перезаписывались без 
прочтения, и каждое из них могло бы быть прочитано только один раз.
Семафоры и семафорные примитивы можно использовать и как счетчики ресурсов. Рассмотрим это 
применение на примере задачи «поставщик-потребитель».
Постановка задачи:
П1 – поставщик; создает информацию (процесс П11) и помещает ее (П12) в общий буферный пул. 
Емкость буферного пула – N буферов.
П2 – потребитель; считывает информацию (процесс П21) из буферного пула и выводит ее на печать 
(процесс П22).
e – переменная, означающая число свободных буферов.
f  – переменная, означающая число занятых буферов.
Необходимо обеспечить взаимодействие процессов так, чтобы в текущий момент времени к 
буферному пулу имел доступ только 1 из процессов; также необходимо предотвратить си туацию, когда 
процесс-поставщик пытается записать информацию в несуществующий буфер или процесс -потребитель 
пытается считать информацию из несуществующего буфера.


Решение:
П1: {L1: П11; P(e); P(S); П12; V(f); V(S); goto L1}
П2: {L2: P(f); P(S); П21; V(e); V(S); П22; goto L2}
Теперь при отсутствии свободного ячейки буфера процесс П1 остановится на примитиве Р(е), не 
заблокировав критическую секцию работы с буферным пулом. Следовательно, процесс П2 сможет без 
помех обратиться к буферному пулу и освободить буфер.
Представленное решение справедливо для любого числа процессов-поставщиков и процессов-потребителей


15.06.2014; 14:40
хиты: 220
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь