Листинг 6.2: Второй вариант попытки реализации взаимного исключения, Листинг 6.3: Третий вариант попытки реализации взаимного исключения - Независимые и взаимодействующие вычислительные процессы

Var перекл1,перекл2: boolean;

Begin перекл1:=false;

Перекл2:=false;

Parbegin

While true do

Begin

While перекл2 do

Begin end;

Переклl:=true;

CS1; (* Критический интервал процесса ПР1 *)

Nepeклl:=false:

PR1; (* процесс ПР1 после критического интервала *)

End

And

While true do

Begin

While перекл1 do

Begin end;

Перекл2:=true;

CS2; (* Критический интервал процесса ПР2 *)

Перекл2:=fa1se;

PR2; (* процесс ПР2 после критического интервала *)

End

Parend

End.

Следующий (третий) вариант решения этой задачи (листинг 6.3) усиливает взаимное исключение, так как в процессе ПР1 проверка значения переменной перекл2 выполняется после установки переменной перекл1 в значение true (аналогично для ПР2).

Листинг 6.3: Третий вариант попытки реализации взаимного исключения

Var перекл1,перекл2 : boolean;

Begin перекл1:=false;

Перекл2:=false;

Parbegin

ПР1: while true do

Begin

Перекл1:=true:

While перекл2 do

Begin end;

CS1;{ Критический интервал процесса ПР1 }

Перекл1:=false;

PR1;{ ПР1 после критического интервала }

End

And

ПР2: while true do

Begin

Перекл2:=trueж

While перекл1 do

Begin end;

CS2; { Критический интервал процесса ПР2 }

Перекл2:=false;

PR2; { ПР2 после критического интервала }

End

Parend

End.

Алгоритм, приведенный в листинге 6.3, также имеет свои недостатки. Действительно, возможна ситуация, когда оба процесса одновременно установят свои переключатели в значение true и войдут в бесконечный цикл. В этом случае будет нарушено требование отсутствия бесконечного ожидания входа в свой критический интервал. Предположив, что скорости исполнения процессов произвольны, мы получили такую последовательность событий, при которой процессы вообще перестанут нормально выполняться.

Рассмотренные попытки решить проблему критических интервалов иллюстрируют некоторые тонкости, лежащие в основе этой проблемы.

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

Похожие статьи




Листинг 6.2: Второй вариант попытки реализации взаимного исключения, Листинг 6.3: Третий вариант попытки реализации взаимного исключения - Независимые и взаимодействующие вычислительные процессы

Предыдущая | Следующая