Операционные системы. Процессы и потоки. Илюшкин Б.И. - 56 стр.

UptoLike

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

flag[1] = false ;
/* приостановка выполнения основной программы
и запуск P0,P1 */
parbegin (P0,P1) ;
}
Условия взаимоисключения выполняются. Рассмотрим процесс
P0. Если flag[0] = true, P1 не может войти в критическую сек-
цию. Если P1 уже находится в критической секции, то flag[1] =
true и для P0 вход в критическую секцию заблокирован [3]. В дан-
ном алгоритме взаимная блокировка предотвращается. Предположим,
что P0 заблокирован в своем цикле while. Следовательно, flag[1]
= true, а turn = 1. P0 может войти в критическую секцию толь-
ко в том случае, когда либо flag[1] =false, либо turn = 0.
Может быть три случая:
P1 не намерен входить в критическую секцию. Однако это не-
возможно, поскольку при этом выполнялось бы условие flag[1]
=false.
P1 ожидает входа в критическую секцию. Это также невозмож-
но, так как если turn =1 , то P1 способен войти в критическую сек-
цию.
P1 циклически использует критическую секцию. Это также не-
возможно, поскольку P1 перед каждой попыткой входа в критиче-
скую секцию устанавливает значение turn = 0 , давая возможность
доступа в критическую секцию процессу P0.
Алгоритм Петерсона обобщается на случай n процессов.
Аппаратный подход
Процессоры многих компьютеров поддерживают команды, ко-
торые за один цикл выборки атомарно выполняют над ячейкой па-
56