ВУЗ:
Составители:
program Алгоритм Деккера-Дейкстры;
var избранный_процесс: (первый, второй);
П1_хочет_войти, П2_хочет_войти: логический;
procedure П1;
begin
while истина do
begin
П1_хочет_войти:=истина;
while П2_хочет_войти do
begin
if избранный_процесс=второй then
begin
П1_хочет_войти:=ложь;
while избранный_процесс=второй
do ;
П1_хочет_войти:=истина;
end;
end;
критический_участок_процесса_П1
;
избранный_процесс:=второй;
П1_хочет_войти:=ложь;
прочие операторы процесса П1;
end;
end;
procedure П2;
begin
while истина do
begin
П2_хочет_войти:=истина;
while П1_хочет_войти do
begin
if избранный_процесс=первый then
begin
П2_хочет_войти:=ложь;
while избранный_процесс=первый
do ;
П2_хочет_войти:=истина;
end;
end;
критический_участок_процесса_П2
;
избранный_процесс:=первый;
П2_хочет_войти:=ложь;
прочие операторы процесса П2;
end;
end;
{ Основной процесс }
begin
П1_хочет_войти:=ложь;
П2_хочет_войти:=ложь;
Избранный_процесс:=первый;
{ Запуск параллельных процессов }
П1; П2;
end;
Рис. 3.3. Программная реализация примитивов взаимоисключения
3.4.2.4. РЕАЛИЗАЦИЯ ПРИМИТИВОВ ВЗАИМОИСКЛЮЧЕНИЯ
С ИСПОЛЬЗОВАНИЕМ АППАРАТНЫХ СРЕДСТВ
Для синхронизации с использованием аппаратных средств необходимо наличие в системе команд ЭВМ команды, кото-
рая обеспечивает выполнение следующих операций: чтение переменной, запись ее значения в область сохранения, установка
нужного конкретного значения этой переменной.
Подобная команда в настоящее время существует практически во всех ЭВМ и обычно имеет мнемоническое обозначе-
ние
testandset (проверить_и_установить). Пример применения testandset приведен на рис. 3.4.
program Пример_TestAndSet;
var активный: логический;
{ Процесс П1 }
procedure П1;
var первому_входить_нельзя: логический;
begin
while истина do
begin
первому_входить_нельзя:=истина;
while первому_входить_нельзя do
testandset(первому_входить_нельзя, активный);
Критический участок процесса П1;
активный:=ложь;
Прочие операторы процесса П1;
end;
end;
{ Процесс П2 }
Страницы
- « первая
- ‹ предыдущая
- …
- 34
- 35
- 36
- 37
- 38
- …
- следующая ›
- последняя »
