Вопросы
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.