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

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

Parbegin






Команда testandset

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

testandset (a, b)

Ø читает значение логической переменной b,

Ø копирует его в a,

Ø устанавливает для b значение "истина"

и все это в рамках одной непрерываемой операции.

 

Пример использования команды проверки и установки для реализации взаимоисключения:

program примерtestandset

var активный: логический;

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

var первому в ходитьнельзя: логический;

Begin

while истина do

Begin

первомувходитьнельзя:= истина;

while первомувходитьнельзя do

testandset (первомувходитьнельзя, активный);

критическийучастокодин;

активный:= ложь;

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

End

End;

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

var второмувходитьнельзя: логический;

Begin

while истина do

Begin

второмувходитьнельзя:= истина;

while второмувходитьнельзя do

testandset (второмувходитьнельзя, активный);

критическийучастокдва;

активный:= ложь;

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

End

End;

Begin

активный:= ложь;

parbegin

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

процессдва

Parend

End;

Рис. 4.8 Реализация взаимоисключения

при помощи команды testandsef (ПРОВЕРИТЬ И УСТАНОВИТЬ)

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

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

Предположим теперь, что "процессдва" уже находится в своем критическом участке, когда "процессодин" хочет войти в критиче­ский участок. "Процессодин" устанавливает значение "истина" для переменной "первомувходитьнельзя", а затем многократно прове­ряет значение переменной "активный" по команде testandset. По­скольку "процессдва" находится в своем критическом участке, это значение остается истинным. Каждая команда проверки и установки обнаруживает, что "активный" имеет значение "истина", и устанавливает это значение для переменных "первомувходитьнельзя" и "активный". Таким образом, "процессодин" продолжает нахо­диться в цикле активного ожидания, пока "процессдва" в конце кон­цов не выйдет из своего критического участка и не установит зна­чение "ложь" для переменной "активный". В этот момент команда проверки и установки, обнаружив это значение переменной "ак­тивный" (и установив для нее истинное значение, чтобы "процессдва" не мог больше войти в свой критический участок), установит значе­ние "ложь" для переменной "первомувходитьнельзя", что позволит, чтобы "процессодин" вошел в свой критический участок.

Этот способ реализации взаимоисключения не исключает бес­конечного откладывания, однако здесь вероятность такой ситуации весьма мала, особенно если в системе имеется несколько процессо­ров. Когда процесс, выходя из своего критического участка, уста­навливает значение "ложь" переменной "активный", команда про­верки и установки testandset другого процесса, вероятнее всего, сможет "перехватить" переменную "активный" (установив для нее значение "истина") до того, как первый процесс успеет пройти цикл, чтобы снова установить значение "истина" для этой переменной.








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



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

Методика исследования периферических лимфатических узлов. Исследование периферических лимфатических узлов производится с помощью осмотра и пальпации...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Неисправности автосцепки, с которыми запрещается постановка вагонов в поезд. Причины саморасцепов ЗАПРЕЩАЕТСЯ: постановка в поезда и следование в них вагонов, у которых автосцепное устройство имеет хотя бы одну из следующих неисправностей: - трещину в корпусе автосцепки, излом деталей механизма...

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