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

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

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






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

Рассмотрим более общий случай, когда одному процессу необ­ходимо, например, чтобы он получал уведомление о наступлении некоторого события. Предположим, что какой-либо другой процесс может обнаружить, что данное событие произошло. Программа рис. 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; просмотров: 540. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Мелоксикам (Мовалис) Групповая принадлежность · Нестероидное противовоспалительное средство, преимущественно селективный обратимый ингибитор циклооксигеназы (ЦОГ-2)...

Менадиона натрия бисульфит (Викасол) Групповая принадлежность •Синтетический аналог витамина K, жирорастворимый, коагулянт...

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

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

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

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

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