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

 

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

 

var S : семафор;

procedure процесс_Х;

begin

{Предшествующие операторы }

P(S);{семафор 0, ожидать на S, иначе S:=S-1}

{Остальная часть процесса_Х}

end;

procedure процесс_Y;

begin

{Предшествующие операторы }

V(S);{если процесс Х ожидает на S, разрешить работу, иначе S:=S+1}

{Остальная часть процесса_Y}

end;

begin

Инициализация_S(S,0);

Parbegin

процесс_Х;

процесс_Y;

Parend

end.

Реализация взаимодействия в паре “производитель-потребитель” при помощи семафоров

 

Между процессами может возникать ситуация, при которой один процесс

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

Рассмотрим алгоритм, в котором для реализации взаимодействия в паре “производитель”- “потребитель” применяются операции над смафорами.

 

var S1, S2: семафор;{S1 используется для обеспечения доступа к разделяемой переменной буфер в режиме взаимоисключения, S2 используется для обеспечения синхронизации процессов}

буфер : integer;

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

var результат : integer;

begin

while (true) do

begin

{Вычисление Результата}

P(S1);

буфер:= результат;

V(S1);

V(S2);

end

end;

procedure_потребитель;

var результат : integer;

begin

while (true) do

begin

P(S2);

P(S1);

Результат:=Буфер;

V(S1);

{Запись Результата}

end

end;

begin

инициализация_S1(S1,1);

инициализация_S2(S2,0);

Parbegin

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

потребитель

Parend

end.

Мониторы

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

Монитор (monitor) - это набор процедур и информационных структур, которым процессы пользуются в режиме разделения, причем в каждый момент им может пользоваться только один процесс.

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

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








Дата добавления: 2017-01-29; просмотров: 586;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.