Составители:
§5 Реализация оператора await
Решение задачи критической секции можно использовать для реа-
лизации безусловного неделимого действия < S; >, скрывая внут-
ренние контрольные точки от других процессов.
Пусть CSenter — входной протокол, CSexit — выходной про-
токол. Тогда действие < S; > реализуется так
CSenter;
S;
CSexit;
Здесь предполагается, что все секции кодов процессов, которые
изменяют или ссылаются на переменные, изменяемые в S, защище-
ны анал огичн ыми протоколами (критическими секциями).
Теперь нам доступна реализация оператора < await (B) S; > —
условного неделимого действия, которое начинает осуществляться
при B = true и далее выполняет S.
Для циклич еской проверки условия B можно использовать та-
кой цикл (тело цикла, отмеченное вопросительными знаками, об-
суждается далее):
1) CSenter;
2) while (!B) {???};
3) S;
4) CSexit;
Здесь опять-таки предполагается, что критические секции всех
процессов, изменяющих переменные B или S, или использующих
переменные, изменяемые в S, защищены такими же протоколами
входа и выхода.
Возникает вопрос, как реализовать тело цикла, выделенно-
го выше вопросительными знаками. Если цикл выполняется, зна-
чит B = false; единствен ный способ сделать условие B истинн ым
— изменить в другом процессе значения переменных, входящих в
это условие. Но поскольку операторы, изменяющие эти перемен-
ные находятся в критических секциях, а эти критические секции
не могут исполняться, когда рассматриваемый процесс находится
в своей критической секции, то единственный способ продвижения
50
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »
