ВУЗ:
Составители:
69
Ресурс
свободен?
F(D)=1?
Нет, занят
Попытка доступа к
разделяемому ресурсу D
Неделимая операция
«поверка-установка»
Да, свободен
Занять ресурс
F(D):=0
Критическая секция
(работа с ресурсом D)
Освободить ресурс
F(D):=1
Продолжение вычислений
Рисунок 18 – Работа в критической секции с использованием блокирующих
переменных
Блокирующие переменные могут использоваться не только при до-
ступе к разделяемым данным, но и при доступе к разделяемым ресурсам
любого вида. Если все потоки разработаны с учетом вышеописанных
соглашений, то взаимное исключение гарантируется. При этом потоки
могут быть прерваны ОС в любой момент и в любом месте, в том числе
в критической секции. Однако следует заметить, что одно ограничение
на прерывания все же имеется – нельзя прерывать поток между выпол-
нением операций проверки и установки блокирующей переменной, т.к.
это нарушит принцип взаимного исключения.
Действительно, пусть в результате проверки переменной поток
определил, что ресурс свободен, но сразу после этого, не успев устано-
вить переменную в 0, был прерван. За время его приостановки другой
поток занял ресурс, вошел в свою критическую секцию, но также был
прерван, не завершив работы с разделяемым ресурсом. Когда управле-
ние было возвращено первому потоку, он, считая ресурс свободным,
установил признак занятости и начал выполнять операции в критиче-
ской секции. Таким образом, в одной критической секции производят
работу два различных потока, а это потенциально может привести к не-
желательным последствиям.
Страницы
- « первая
- ‹ предыдущая
- …
- 67
- 68
- 69
- 70
- 71
- …
- следующая ›
- последняя »
