АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Алгоритм Деккера

Прочитайте:
  1. III . Изучите алгоритмы практической работы.
  2. Алгоритм 65 «Кровотечение в послеродовом периоде»
  3. Алгоритм 72 «Ожоги и травмы глаза, века, конъюнктивы»
  4. Алгоритм аудиторной работы студента
  5. Алгоритм базисной СЛР (Basic Life Support – BLS)
  6. АЛГОРИТМ ВВЕДЕНИЯ БЦЖ ВАКЦИНЫ
  7. АЛГОРИТМ ВВЕДЕНИЯ ИНСУЛИНА.
  8. Алгоритм ведения больных апластической анемией.
  9. Алгоритм ведения больных аутоиммунной гемолитической анемией.
  10. Алгоритм взвешивания беременной

Алгоритм Деккера основан на использовании трех переменных (листинг 6.4): перекл!, перекл2 и ОЧЕРЕДЬ. Пусть по-прежнему переменная перекл!=1гие тогда, ког­да процесс ПР1 хочет войти в свой критический интервал (для ПР2 аналогич­но), а значение переменной ОЧЕРЕДЬ указывает, чье сейчас право сделать попытку входа, при условии, что оба процесса хотят выполнить свои критические интер­валы.

Листинг 6.4. Алгоритм Деккера

label 1. 2;

var перекл!. перекл2: boolean:

ОЧЕРЕДЬ: integer; Begin перекл!:=false: nepe^2:=false:

ОЧЕРЕДЬ:=!; продолжение #


Листинг 6.4 (продолжение)

parbegin

while true do

begin перекл!:-true:
1: if nepetui2-true then \

if ОЧЕРЕДЬ-! then go to 1 ;

else begin nepewil:=fa1se; while ОЧЕРЕДЬ-2 do

begin end end else begin

CS1 { Критический интервал ПР1 } ОЧЕРЕДЬ:=2: перекл!:-false end end and

while true do.

begin перекл2:-1: 2: if nepewil-true then

if ОЧЕРЕДЬ=2 then go to 2 else begin перекл2:-false; while ОЧЕРЕДЬ=1 do

begin end end else begin

CS2 (Критический интервал ЛР2 } ОЧЕРЕДЬ:-!; nepewi2:-false end end parend end.

Если nepewi2=true и nepewil=fal se, то выполняется критический интервал про­цесса ПР2 независимо от значения переменной ОЧЕРЕДЬ. Аналогично для случая nepewi2=fal se и nepewil-true.

Если же оба процесса хотят выполнить свои критические интервалы, то есть nepewi2=true и nepewil=true, то выполняется критический интервал того процесса, на который указывало значение переменной ОЧЕРЕДЬ, независимо от скоростей развития обоих процессов. Использование переменной ОЧЕРЕДЬ совместно с перекл! и перекл2 в алгоритме Деккера позволяет гарантированно решать проблему кри­тических интервалов. Переменные перекл! и перекл2 обеспечивают, что взаимное выполнение не может иметь места; переменная ОЧЕРЕДЬ гарантирует от взаимного блокирования. Взаимное блокирование невозможно, так как переменная не из­меняет своего значения во время выполнения программы принятия решения о том, кому же сейчас проходить свой критический интервал. Тем не менее реализация критических интервалов на основе описанного алго­ритма практически не используется из-за чрезмерной сложности, особенно в случаях, когда алгоритм Деккера обобщается с двух до N процессов.



Дата добавления: 2015-01-18 | Просмотры: 642 | Нарушение авторских прав



1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |



При использовании материала ссылка на сайт medlec.org обязательна! (0.003 сек.)