Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
91
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

V(Взаимн_искл);

P(Клиент_Сем[i]);

end;

Талер 1: begin ... end;

Талер m: begin integer h;

начало: P(Талер_Сем[m]); P(Взаимн_искл);

Требование[Номер_Клиента[m]] := Требование[Номер_Клиента[m]] - 1;

Талер_Перем[m] := 1;

наличные := наличные + 1;

V(Возвращенные_Талеры[Номер_Клиента[m]]);

for h:=1 step 1 until N do begin

If (Попытка_выдать_талер_клиенту(h))

then goto выход;

end;

выход:V(Взаимн_искл);

goto начало

end;

parend;

end;

Сущность: есть клиент и есть талер. Каждый клиент имеет переменную состояния Клиент_Пер. Если Клиент_Пер = 1 – это означает: “хочу получить заем”. Иначе Клиент_Пер = 0. Каждый талер имеет переменную состояния Талер_Пер. Если Талер_Пер = 1 – это означает: “нахожусь среди свободного капитала”. Клиенты пронумерованы от 1 до N, а талеры от 1 до M. С каждым клиентом связывается переменная Номер_Талера, значение которой после очередной выдачи талера клиенту определяет номер только что выделенного талера. В свою очередь с каждым талером связана переменная Номер_Клиента , значение которой указывает клиента, которому выдан этот талер. Имеются семафоры Клиент_Сем, и Талер_Сем. Фактически возврат талера заканчивается после того, как тот действительно присоединится к наличному капиталу банкира: об этом талер будет сообщать клиенту с помощью общего семафора клиента "Возвращенные_талеры". Значение булевой процедуры "Попытка_выдать_талер_клиенту" говорит о том, удовлетворен ли задержанный запрос на талер. В программе для талера используется тот факт, что возврат талера может теперь привести к удовлетворению единственного задержанного запроса на талер (если банкир распоряжается услугами более чем одного вида, то последнее свойство уже не будет выполняться).

Монитороподобные средства синхронизации

Основной концепцией таких средств является организация контроля правильности установления взаимосвязи между процессами.

Считается, что данные средства синхронизации имеют большую наглядность, чем семафорная техника, что достигается за счет структурирования.

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

Механизм типа «критическая область»

Как следует из названия, это механизм, ориентированный на решение задачи взаимного исключения.

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

  1. VAR V: SHARED T;

  2. REGION V DO S.

VAR R: SHARED T1;

Q: SHARED T2;

Begin

Parbegin

процесс 1: . . . L1: REGION R DO S1; . . .

процесс 2: . . . L2: REGION Q DO S2; . . .

. . . . . . . . . . .

процесс i: . . . Li: REGION R DO S3; . . .

Parend;

End.

Описание переменной V: SHARED T означает, что определяется ресурс с именем V, как некоторая переменная, доступная параллельным процессам. Тип ресурса задаётся его описанием T.

Для осуществления доступа к ресурсу V в тексте программы процесса требуется использовать конструкцию вида REGION V DO S. Такая конструкция описывает отдельную критическую область относительно критического ресурса V и определяет действия S, которые будут осуществлены над ресурсом. Такие конструкции при исполнении исключают друг друга относительно критического ресурса.

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

TYPE T = ARRAY 1..100 OF INTEGER;

VAR M: SHARED T;

Begin

Parbegin

Процесс 1: L1: <действие процесса>

REGION M DO <обработка массива M>;

GOTO L1;

. . . . . . . . . . . . . . . . . .

Parend;

End.