Составители:
Рубрика:
fi;
В этом операторе обе ветви являются защищенными операторами
взаимодействия.
Здесь сначала вычисляются логические выражения в защитах:
1) если обе защиты не пропускают, то выполнение оператора if
заканчивается;
2) если одна из защит пропускает, а вторая — нет, то выбира-
ется та, которая пропускает и происходит ожидание возможности
выполнения соответствующего оператора C_i;
3) если обе защиты пропускают, но блокируют, то происходит
ожидание, пока одна из них разблокируется;
4) если обе защиты пропускают и не блокируют, то выбирается
одна из них (недетерминирование).
Аналогично работает оператор do; отличие в том, что цикл по-
вторяется до тех пор, пока все защиты перестанут пропускать.
Рассмотрим примеры
1. В первом примере в защите нет логического выражения и по-
тому цикл выполняется бесконечно (при готовности процессов West
и East):
process Copy {
char c;
do West?c --> East!c
# запросить у процесса West и выдать процессу East
od
}
2. Во втором примере может буферизоваться один или два сим-
вола
process Copy {
char c1, c2;
West?c1 # запросить из West
do West?c2 --> East!c1
# - защита блокирована (может быть West не готов
# выполнить запрос)
55
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »