Решение проблемы producer-consumerс помощью семафоров

Одной из типовых задач, требующих организации взаимодействия процессов, является задача producer-consumer (производитель-потребитель). Пусть два процесса обмениваются информацией через буфер ограниченного размера.
Производитель закладывает информацию в буфер, а потребитель извлекает ее оттуда. На этом уровне деятельность потребителя и производителя можно описать следующим образом:

Producer: while(1) {

produce_item;

put_item;

Consumer: while(1) {

get_item; consume_item;

}

Если буфер заполнен, то производитель должен ждать, пока в нем появится место, чтобы положить туда новую порцию информации. Если буфер пуст, то потребитель должен дожидаться нового сообщения. Как можно реализовать эти условия с помощью семафоров? Возьмем три семафора: empty, full и mutex. Семафор full будем использовать для гарантии того, что потребитель будет ждать, пока в буфере появится информация. Семафор empty будем использовать для организации ожидания производителя при заполненном буфере, а семафор mutex — для организации взаимоисключения на критических участках, которыми являются действия put_item и get_item (операции «положить информацию» и «взять информацию» не могут пересекаться, так как в этом случае возникнет опасность искажения информации). Тогда решение задачи на С-подобном языке выглядит так:

Semaphore mutex Semaphore empty Semaphore full Producer: while(1) {

produce_item; P(empty);

P(mutex); put_item;

V(mutex);

V(full) ;

}

Consumer: while(1) {

P(full);

P(mutex); get_item;

V(mutex);

V(empty); consume_item;

Легко убедиться, что это действительно корректное решение поставленной задачи. Попутно заметим, что семафоры использовались здесь для достижения двух целей: организации взаимоисключения на критическом участке и взаимосинхронизации скорости работы процессов.

<< | >>
Источник: В.Е. Карпов К.А. Коньков. Основы операционных систем. 2005

Еще по теме Решение проблемы producer-consumerс помощью семафоров:

  1. Причиной любой проблемы является ее решение.
  2. Совместный поиск взаимоприемлемого решения проблемы
  3. СОВРЕМЕННЫЕ ТЕНДЕНЦИИ И ПРОБЛЕМЫ В ОТЕЧЕСТВЕННОЙ ТЕОРИИ И ПРАКТИКЕ ПСИХОЛОГИЧЕСКОЙ ПОМОЩИ
  4. Теоретико-методологические предпосылки практических решений проблемы личности в правоохранительных органах.
  5. 5.2.19. Внимание ко всем предыдущим аспектам и безразличие к другим проблемам, решение которых не составит никакого труда
  6. Чтобы избавиться от растерянности, надо научиться жить с еще не решенными проблемами и не требовать от жизни немедленного совета, как их устранить.
  7. § 3. Исправление недостатков решения арбитражного суда. Дополнительное решение
  8. ШИШКА См. статью ОТЕК, ШИШКОВИДНАЯ ЖЕЛЕЗА (ПРОБЛЕМЫ) См. ЭПИФИЗ (ПРОБЛЕМЫ).
  9. «Проблема» в том виде, в каком мы ее себе представляем, редко оказывается настоящей проблемой
  10. БОЛЬШОЙ ПАЛЕЦ (ПРОБЛЕМЫ) См. статью ПАЛЬЦЫ (ПРОБЛЕМЫ).
  11. КРОВООБРАЩЕНИЕ (ПРОБЛЕМЫ) См. статью АРТЕРИИ (ПРОБЛЕМЫ).
  12. ЛОДЫЖКИ (ПРОБЛЕМЫ) См. статью СТОПЫ (ПРОБЛЕМЫ),