Page 59 - 6571
P. 59
якими працює інший процес, то виконання операції присвоєння
буде неподільною операцією.
На жаль, багато операторів в паралельному програмуванні,
що посилаються на спільні змінні, не задовольняють цим умовам.
Однак часто виконуються більш м’які умови.
Критичним посиланням у виразі називається посилання на
змінну, що змінюється іншим процесом. Припустимо, що будь-
яке критичне посилання – це посилання на просту змінну, яка
зберігається в комірці пам’яті і може бути зчитана і записана ав-
томатично. Оператор присвоєння x = e задовольняє умові «не
більше одного», якщо або вираз e містить не більше одного кри-
тичного посилання, а змінна x не зчитується іншим процесом, або
вираз e не містить критичних посилань, а інші процеси можуть
зчитувати змінну x.
Дана умова називається «не більше одного», оскільки в тако-
му випадку можлива тільки одна спільна змінна, і на неї посила-
ються не більше одного разу. Аналогічне визначення застосову-
ється і до виразів, які не включають в себе оператори присвоєння.
Такий вираз задовольняє умові «не більше одного», якщо містить
не більше одного критичного посилання.
Якщо оператор присвоєння задовольняє вимогам умови «не
більше одного», то виконання цього оператора буде «здаватися»
неподільною операцією, оскільки одна-єдина спільна змінна у
виразі буде записуватися або зчитуватися тільки один раз.
Наприклад, якщо вираз e не містить критичних посилань, а змін-
на x – проста змінна, що зчитується іншими процесами, то вони
не можуть розпізнати, чи обчислюється вираз неподільним чи-
ном. Аналогічно, якщо e містить одне критичне посилання, то
процес, що виконує присвоєння, не зможе зафіксувати моменту
зміни значення змінної. Йому стане доступним тільки деяке кін-
цеве значення цієї змінної.
Наведемо декілька прикладів у яких задовольняється умова
«не більше одного». У наступній програмі обидва присвоєння за-
довольняють умові «не більше одного».
int x = 0, y = 0;
co x = x+1; // y = y+1; oc;
У даному випадку не існує критичних посилань в жоден про-
цес, тому кінцевим значенням змінних x та y буде 1.
58