Page 98 - 6571
P. 98
Перевага симетричного запису полягає в тому, що тепер
алгоритм поліклініки для двох процесів легко узагальнити на
випадок n процесів (лістинг 13). Кожен з процесів спочатку
сигналізує, що він збирається увійти в критичну секцію,
присвоюючи своїм змінним turn значення 1, а потім він
знаходить максимальне значення з усіх turn[i] і додає до нього
1. Нарешті, процес запускає цикл for і, як і в крупномодульному
рішенні, очікує своєї черги. Дані дії не є неподільними, тому
точний результат не гарантується. Однак, якщо декілька процесів
отримують одне і те ж саме значення, то вони упорядковуються
відповідно до правила визначеного вище.
Лістинг 13 – Алгоритм поліклініки (дрібномодульне рішення)
int turn[1: n] = ([n] 0);
process CS[i = 1 to n] {
while (true) {
turn[i] = 1;
turn[i] = max(turn[1: n])+1;
for [j = 1 to n st j != i]
while (turn[j] != 0 and (turn[i], i) > (turn[j], j))
skip;
критична секція;
turn[i] = 0;
некритична секція;
}
}
Запитання для самоперевірки
1. Для чого використовується алгоритм розриву вузла?
2. Який принцип роботи алгоритму розриву вузла?
3. Яким чином алгоритму розриву вузла для двох процесів
можна адаптувати під будь-яку кількість процесів?
4. У чому полягає недолік використання алгоритму розриву
вузла?
5. Який принцип роботи алгоритму квитка?
6. Назвіть головну вимогу якій повинен задовольняти алго-
ритм квитка?
7. Який недолік притаманний алгоритму квитка?
8. Який принцип роботи алгоритму поліклініки?
97