взлом

Открытая медицинская библиотека

Статьи и лекции по медицине ✚ Библиотека студента-медика ✚ Болезни и способы их лечения.

Хирургия Алгоритм Деккера
просмотров - 171

Алгоритм Деккера основан на использовании трех переменных (листинг 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 процессов.