Основные задачи параллельного программирования. Конспект лекций. Степанов Б.М. - 10 стр.

UptoLike

Составители: 

10
В многозадачных системах с разделением процессорного времени использование об-
щих переменных для решения задачи взаимного исключения будет выглядеть иначе. Рас-
смотрим использование одной переменной FLAG, показывающей нахождение какого-либо
процесса в критическом интервале (допустим, FLAG=1- критический интервал свободен, а
FLAG=0- занят).
Begin
mov FLAG,1
Cobegin
Process1:
begin
.
.
loop: test FLAG,1
jz loop
mov FLAG,0
Критический
интервал
mov FLAG,1
end;
Process2:
begin
.
.
loop: test FLAG,1
jz loop
mov FLAG,0
Критический
интервал
mov FLAG,1
end;
Coend;
end;
Здесь первые команды mov сбрасывают флажок в 0 пытаясь предотвратить доступ к
критическому интервалу другому процессу. Последние команды mov устанавливают флажок
в 1, разрешая другому процессу войти в критический интервал. При таком решении имеется
возможность входа обоих процессов в критический интервал. Предположим, что FLAG=1 и
происходит такая последовательность событий:
1. Выполняется команда test в процессе 1.
2. До выполнения команды jz в процессе 1 происходит переключение на процесс 2.
3. Выполняется команда test в процессе 2.
Очевидно, что при таком подходе к решению задачи оба процесса могут находиться в
критическом интервале.
Лекция 3. Средства взаимного исключения.
Использование специальных команд
Рассмотрим вопрос использования специальных команд Проверить и установить” –
Test & Set (TS).
(Tset – в микропроцессоре Z80 ). Команда TS работает с некоторой глобальной пере-
менной х. TS выбирает некоторый разряд двоичной переменной х и помещает его в признак
      В многозадачных системах с разделением процессорного времени использование об-
щих переменных для решения задачи взаимного исключения будет выглядеть иначе. Рас-
смотрим использование одной переменной FLAG, показывающей нахождение какого-либо
процесса в критическом интервале (допустим, FLAG=1- критический интервал свободен, а
FLAG=0- занят).

      Begin
      mov FLAG,1
      Cobegin
      Process1:
      begin
      .
      .
      loop: test FLAG,1
                   jz loop
            mov FLAG,0
             Критический
             интервал
             mov FLAG,1
      end;
      Process2:
      begin
      .
      .
      loop: test FLAG,1
                   jz loop
            mov FLAG,0
             Критический
             интервал
            mov FLAG,1
      end;
      Coend;
      end;

       Здесь первые команды mov сбрасывают флажок в 0 пытаясь предотвратить доступ к
критическому интервалу другому процессу. Последние команды mov устанавливают флажок
в 1, разрешая другому процессу войти в критический интервал. При таком решении имеется
возможность входа обоих процессов в критический интервал. Предположим, что FLAG=1 и
происходит такая последовательность событий:
       1. Выполняется команда test в процессе 1.
       2. До выполнения команды jz в процессе 1 происходит переключение на процесс 2.
       3. Выполняется команда test в процессе 2.
       Очевидно, что при таком подходе к решению задачи оба процесса могут находиться в
критическом интервале.

                       Лекция 3. Средства взаимного исключения.
                          Использование специальных команд

       Рассмотрим вопрос использования специальных команд “Проверить и установить” –
Test & Set (TS).
       (Tset – в микропроцессоре Z80 ). Команда TS работает с некоторой глобальной пере-
менной х. TS выбирает некоторый разряд двоичной переменной х и помещает его в признак

                                          10