Алгоритм Деккера
Алгоритм Деккера основан на использовании трех переменных (листинг 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 | Просмотры: 649 | Нарушение авторских прав
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|