Составители:
Рубрика:
4. В четвертом примере используется три порта: acquire, reply,
release.
Здесь рассмотрим распределитель ресурсов, использующий
асинхронную передачу сообщений.
process Allocator {
int avail=MAXUNITS;
set units=[начальные значения];
int index, unitid;
do avail>0; Client[*]?acquire(index) -->
avail--; remove(units, unitid);
# удаление units из доступных
Client[index]!reply(unitid);
# ответ клиенту с указателем id
[ ] Client[*]?release(index, unitid) -->
avail++; insert(units, unitid);
# вставить units на место
od
}
Замечание. В этой программе не нужно сохранять запросы, по-
скольку получение сообщения acquire откладывается до тех пор,
пока не появится доступные элем енты (т. е. до тех пор, пока не
станет avail>0).
5. Пятый пример. Симметричное решение в задаче об обмене
значениями двух локальных переменных.
process P1 {
int value1=1, value2;
if P2!value1 --> P2?value2;
# процессу P2 выдать значение value1,
# а затем запросить у него value2
[ ] P2?value2 --> P2!value1;
# или наоборот
fi
}
process P2 {
int value1, value2=2;
57
Страницы
- « первая
- ‹ предыдущая
- …
- 54
- 55
- 56
- 57
- 58
- …
- следующая ›
- последняя »