Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Синхронизация процессов семафорами



Задача производитель-потребитель.

Если в обычной последовательной программе одна процедура вызывает другую и передает ей какие-то данные, никаких проблем не возникает. Эти процедуры являются частью одной программы и выполняются последовательно.

Однако задача существенно усложняется в случае передачи данным одним

процессом другому. Это один из вариантов межпроцессной коммуникации.

Рассмотрим задачу о производителе-потребителе. Предположим, что некий

процесс-производитель производит некую информацию, которую потребляет другой процесс – потребитель. Для простоты будем считать, что информация – это

натуральные числа, а обмен между ними происходит с помощью буфера, хранящего одно значение. Производитель что-то вычисляет и помещает результат вычислений в буфер. Потребитель берет числа из буфера и что-то с ними делает,

например, печатает на экране.

В случае, если скорость работы производителя и потребителя совпадают, то

эта пара будет работать превосходно, и на экране будет формироваться поток данных от производителя. Однако в случае существенной разницы скоростей между

производителем и потребителем все становится хуже.

Если потребитель работает гораздо быстрее производителя, то потребитель

может распечатать одни и те же данные несколько раз. Если производитель работает быстрее, это может привести к потере данных – число в буфере перепишется

несколько раз, и потребитель возьмет только последнее из серии.

Этот пример демонстрирует использование семафоров для синхронизации

двух процессов, что позволяет избежать описанных выше проблем.

program producer_consumer_relationship;

var number_buffer: integer;

number_deposited: semaphore;

number_retrieved: semaphore;

procedure producer_process;

var next_result: integer;

Begin





Дата публикования: 2015-01-26; Прочитано: 186 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...