Решение проблемы 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;
Легко убедиться, что это действительно корректное решение поставленной задачи. Попутно заметим, что семафоры использовались здесь для достижения двух целей: организации взаимоисключения на критическом участке и взаимосинхронизации скорости работы процессов.
Еще по теме Решение проблемы producer-consumerс помощью семафоров:
- Причиной любой проблемы является ее решение.
- Совместный поиск взаимоприемлемого решения проблемы
- СОВРЕМЕННЫЕ ТЕНДЕНЦИИ И ПРОБЛЕМЫ В ОТЕЧЕСТВЕННОЙ ТЕОРИИ И ПРАКТИКЕ ПСИХОЛОГИЧЕСКОЙ ПОМОЩИ
- Теоретико-методологические предпосылки практических решений проблемы личности в правоохранительных органах.
- 5.2.19. Внимание ко всем предыдущим аспектам и безразличие к другим проблемам, решение которых не составит никакого труда
- Чтобы избавиться от растерянности, надо научиться жить с еще не решенными проблемами и не требовать от жизни немедленного совета, как их устранить.
- § 3. Исправление недостатков решения арбитражного суда. Дополнительное решение
- ШИШКА См. статью ОТЕК, ШИШКОВИДНАЯ ЖЕЛЕЗА (ПРОБЛЕМЫ) См. ЭПИФИЗ (ПРОБЛЕМЫ).
- «Проблема» в том виде, в каком мы ее себе представляем, редко оказывается настоящей проблемой
- БОЛЬШОЙ ПАЛЕЦ (ПРОБЛЕМЫ) См. статью ПАЛЬЦЫ (ПРОБЛЕМЫ).
- КРОВООБРАЩЕНИЕ (ПРОБЛЕМЫ) См. статью АРТЕРИИ (ПРОБЛЕМЫ).
- ЛОДЫЖКИ (ПРОБЛЕМЫ) См. статью СТОПЫ (ПРОБЛЕМЫ),