Составители:
while (not B);
это так называемый цикл ожидания (spin loop). Тело этого опе-
ратора пусто; поэтому он просто зацикливается до момента, когда
будет выполнено присваивание B = False.
Безусловное неделимое действие — это действие, не содержа-
щее условия: оно выполняется немедленно в соответствии с требо-
ванием неделимости его компонент.
Условное неделимое действие — это оператор await с условием
B. Если B ложно, то процесс приостанавливается до те х пор, пока B
станет истинным с помощью других процессов.
§8 Синхронизация “производитель –
потребитель”
Рассмотрим задачу копирования всех элементов массива a[n] от
производителя (producer) в массив b[n] к потребителю (consumer).
Условие синхронизации процессов имеет вид
PC : c <= p <= c + 1,
где p — число пере ме щен ных элементов, c — число извле чен ных
элементов.
Здесь имеется два процесса: 1) Producer — производ ител ь, 2)
Consumer — потребитель. Производитель имеет локальный массив
a[n], который считается инициализированным, а потребитель имеет
локальный массив b[n].
Цель: скопировать a[n] в b[n].
Пусть буфером взаимодействия служит одиночная разделяе-
мая переменная buf. Поставленная цель реализуется программой
int buf, p = 0, c = 0;
process Producer {
int a[n] [инициализация]
while (p < n) {
< await (p == c); >
buf = a[p];
28
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »