Вопросы

End.

Процесс_Y

Parbegin

Begin

Begin

While (true) do

Begin

Begin

ЛОКАЛЬНЫЙ_Х:=1;

while (ЛОКАЛЬНЫЙ_X=1) do

testandset(ЛОКАЛЬНЫЙ_Х, ОБЩИЙ);

{Критический участок процесса Х}

ОБЩИЙ:=0;

{Оставшаяся часть процесса Х}

end;

end;

procedure Процесс_Y;

var ЛОКАЛЬНЫЙ_Y: integer;

ЛОКАЛЬНЫЙ_Y:=1;

while (ЛОКАЛЬНЫЙ_Y=1) do

testandset(ЛОКАЛЬНЫЙ_Y, ОБЩИЙ);

{Критический участок процесса Y}

ОБЩИЙ:=0;

{Оставшаяся часть процесса Y}

end;

end;

ОБЩИЙ:=0;

Процесс_Х;

Parend;

1. Преобразуйте следующие выражения с использованием конструкции

Parbegin/Parend для обеспечения максимального параллелизма

3*a*b + 4/(c + d) ** (e-f);

(-b + (b ** 2 - 4 *a*c) **0.5) / (2*a).

2. Почему утверждение о том, что при работе нескольких процессов с общей разделяемой информацией, хранящейся в основной памяти, во избежание получения неопределенных результатов необходимо обеспечить взаимоисключение не является корректным.

3. Проведите исчерпывающий временной анализ алгоритма Деккера.

4. Объясните, как при помощи запрещения и разрешения прерываний можно достаточно эффективно реализовать примитивы взаимоисключения в однопроцессорной машине.


1 Dijkstra E.W. Cooperating Sequential Processes. Technological University, Eindhoven, Nitherlands,1965.

Эдсгер Дейкстра лауреат премии Тьюринга 1972 года. С 1984 года зав.кафедрой информатики в Университете штата Техас в Остине.

2 [Дейкстра-65] Dijkstra E.W. Solution to a Problem in Concurrent Programming Control, CACM, 8, No.9, 1965,c.569.

[Кнут-66] Knuth D. Additional Comments on a Problem in Concurrent Programming Control, CACM, 9,

No 5, 1966, c.321-322.