Page 80 - 4868
P. 80
Ошибка! Стиль не определен. 78
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. Який принцип роботи алгоритму поліклініки?
9. У чому полягає перевага алгоритму поліклініки над алгоритмом
квитка?
10. За яких умов паралельна програма переходить у стан гонок?
ЛЕКЦІЯ 12. МЕХАНІЗМ БАР’ЄРНОЇ СИНХРОНІЗАЦІЇ
ПРОЦЕСІВ
12.1. Спільний лічильник
Багато задач можна вирішити за допомогою ітераційних алгоритмів, які
послідовно обчислюють наближення до вирішення і завершуються, коли
отримана остаточна відповідь або досягнута задана точність обчислень.
Зазвичай такі алгоритми працюють з масивами чисел, і на кожній ітерації
одні і ті ж дії виконуються над всіма елементами масиву. Відповідно, для
синхронного паралельного обчислення окремих частин задачі можна
використовувати паралельні процеси.
Основною властивістю більшості паралельних ітераційних алгоритмів є
залежність результатів кожної ітерації від результатів попередньої. Один із
способів побудови такого алгоритму полягає у реалізації тіла для кожної
ітерації за допомогою оператора co. Якщо не враховувати властивість
завершення і вважати, що на кожній ітерації виконується n задач,то
отримаємо наступний загальний вигляд алгоритму:
while (true) {
co [i = 1 to n]