Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

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





Когда процесс выдает запрос ввода-вывода, он блокирует себя в ожидании завершения соответствующей операции ввода-вывода. Заблокированный процесс должен быть активизирован каким-либо другим процессом. Подобное взаимодействие может служить при­мером функций, относящихся к протоколу блокирования/возобновления.

Рассмотрим более общий случай, когда одному процессу необ­ходимо, например, чтобы он получал уведомление о наступлении некоторого события. Предположим, что какой-либо другой процесс может обнаружить, что данное событие произошло. Программа рис. 4.10 показывает, каким образом при помощи семафора можно реализовать простой механизм синхронизации (блокирования/во­зобновления) для двух процессов.

program блокированиевозобновления;

var событие: семафор;

procedure процессодин;

Begin

предшествующиеоператорыодин;

Р(событие);

прочиеоператорыодин

End;

procedure процессдва;

Begin

предшествующиеоператорыдва;

V(событие);

прочиеоператорыдва

End;

Begin

инициализадйясемафора (событие, 0);

Рис. 4.10Синхронизация блокирования/возобновление процессов при помощи семафоров.  
parbegin

процессодин;

процессдва

Parend

End;

Здесь "процессодин" выполняет некоторые "предшествующие операторыодин", а затем операцию Р (событие). Ранее при инициализа­ции семафор был установлен в нуль, так что "процессодин" будет ждать. Со временем "процессдва" выполнит операцию V (событие), сигнализируя о том, что данное событие произошло. Тем самым, "процессодин" получает возможность продолжить свое выполнение.

Отметим, что подобный механизм будет выполнять свои функ­ции даже в том случае, если "процессдва" обнаружит наступление события и просигнализирует об этом еще до того, как "процессодин", выполнит операцию Р (событие); при этом семафор переключится из 0 в 1, так что операция Р (событие) просто произведет обратное переключение, из 1 в 0, и "процессодин" продолжит свое выполнение без ожидания.

4.13 Пара "производитель-потребитель";

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

program парапроизводительпотребитель;

var исключительныйдоступ: семафор;

числозанесено: семафор;

буферчисла: целое;

procedure процесспроизводитель;

var следующийрезультат: целое;

Begin

while истина do

Begin

вычислениеследующегорезультата;

Р(исключительныйдоступ);

буферчисла:= следующийрезультат;

V(исключительныйдоступ);

V(числозанесено)

End

End;

procedure процесспотребитель;

var следующийрезультат: целое;

Begin

while истина do

Begin

Р(числозанесено);

Р(исключительныйдоступ);

следующийрезультат:= буферчисла;

V(исключительныйдоступ);

записать (следующий результат)

End

End;

Begin

инициализациясемафора(исключительныйдоступ, 1);

инициализациясемафора(числозанесено, 0);

Рис. 4.11Реализация взаимодействия в паре "производитель – потребитель" при помощи семафоров.  
parbegin

процесспроизводитель;

процесспотребитель

Parend

End;

Рассмотрим следующую пару (отношение) "производитель – потребитель". Предположим, что один процесс, источник, или производитель, генерирует информацию, которую другой процесс, получатель, или потребитель, использует. Предположим, что они взаимодействуют при помощи одной разделяемой целой перемен­ной с именем "буферчисла". Процесс-производитель производит некоторые вычисления, а затем заносит результат в "буферчисла";

процесс-потребитель читает "буферчисла" и печатает результат.

Возможно, что эти процессы, производитель и потребитель, ра­ботают в достаточно близком темпе либо резко различаются по ско­ростям. Если каждый раз, когда процесс-производитель помещает свой результат в "буферчисла", процесс-потребитель будет немед­ленно считывать и печатать его, то на печать будет верно выдаваться та последовательность чисел, которую формировал процесс-произ­водитель.

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

Очевидно, что здесь мы хотели бы обеспечить такое взаимодей­ствие процесса-производителя и процесса-потребителя, при кото­ром данные, заносимые в «буферчисла», никогда не терялись бы и не дублировались. Создание подобного режима взаимодействия яв­ляется примером синхронизации процессов.

На рис. 4.11 показана параллельная программа, в которой для реализации взаимодействия в паре "производитель – потребитель" применяются операции над семафорами.

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







Дата добавления: 2015-09-07; просмотров: 570. Нарушение авторских прав; Мы поможем в написании вашей работы!




Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Ситуация 26. ПРОВЕРЕНО МИНЗДРАВОМ   Станислав Свердлов закончил российско-американский факультет менеджмента Томского государственного университета...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Почему важны муниципальные выборы? Туристическая фирма оставляет за собой право, в случае причин непреодолимого характера, вносить некоторые изменения в программу тура без уменьшения общего объема и качества услуг, в том числе предоставлять замену отеля на равнозначный...

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

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

Studopedia.info - Студопедия - 2014-2026 год . (0.013 сек.) русская версия | украинская версия