Составители:
co x = x + 1; // y = y + 1; oc
Здесь нет критических ссылок; окончательными значениями x
и y всегда будут единицы. Эта программа заведомо удовлетворяет
условию “не больше одного”.
Следующая программа также удовлетворяет этому условию:
int x = 0, y = 0;
co x = y + 1; // y = y + 1; oc;
Первый процесс ссылается на y; в рез ультате получается од-
на критическая ссылка, а во втором процессе нет критических
ссылок.
Конечным значением переменной x будет или 1, или 2, а ко-
нечным значением y будет 1. Первый процесс увидит переменную
y либо до увеличения, либо после увеличения, однако, он не знает,
в какой момент (до увеличения или после) он ее видит.
Приведем еще одну программу; здесь ни одно присваивание не
удовлетворяет условию “не больше одного”:
int x = 0, y = 0;
co x = y + 1; // y = x + 1; oc
Окончательными значениями x и y могут быть пары (x, y) =
(1, 1), (1, 2), (2, 1).
§7 Оператор ожидания и синхронизация
В ряде случаев некоторую последовательность операторов необхо-
димо выполнить, как неделимое действие.
Для этого необходим механизм, позволяющий задать крупно-
модульное неделимое действие.
Примеры, когда необходимо задать к рупн омодульное недели-
мое действие легко себе представить:
1) если одна область памяти обязана быть копией другой (на-
пример, при кэшировании), но в динамике в какие -то моменты
тождественность этих областей нарушается; в этом случае изме-
нение/перезапись должны быть неделимой операцией с тем, чтобы
для внешних процессов вр´еменная нетождественность областей не
наблюдалась.
26
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »