Главная Обратная связь

Дисциплины:






Способи взаємодії ниток при багато потоковому програмуванні: семафори, події, взаємне виключення



Дві типові проблеми, з якими програміст може зіткнутися при роботі з потоками :

Гонки (Race conditions) Тупіки(Deadlocks).

Тупіки.Тупік має місце тоді, коли потік чекає ресурс, який в даний момент належить іншому потоку. Розглянемо приклад: Потік 1 захоплює об'єкт А і, для того, щоб продовжувати роботу, чекає можливості захопити об'єкт Б. В той же час Потік 2 захоплює Об'єкт Б і чекає можливості захопити Об'єкт А. Розвиток цього сценарію заблокує обидва потоки; жоден з них не виконуватиметься.

В ролі ресурсів виступають довільні спільно використовувані об’єкти, а саме файли, масиви в пам’яті.

Гонки.Ситуація гонок виникає, коли два або більш потоків намагаються дістати доступ до загального ресурсу і змінити його стан. Розглянемо наступний приклад. Хай Потік 1 дістав доступ до ресурсу і змінив його в своїх інтересах; потім активізувався Потік 2 і модифікував цей же ресурс до завершення Потоку 1. Потік 1 вважає, що ресурс залишився в тому ж стані, що і був до перемикання. Залежно від того, коли саме був змінений ресурс, результати можуть варіюватися — іноді код виконуватиметься нормально, іноді - ні.

Ситуації гонок і тупіків можна уникнути, якщо використовувати такі прийоми:

1. Взаємне виключення.Дозволяє тільки одному потоку за один раз володіти об’єктом.

Характеризується:

- тільки 1 процес знаходиться в середині критичного інтервалу

- якщо жоден процес не знаходиться в критичному інтервалі то довільний інший процес, яки бажає отримати доступ до об’єкту повинне отримати дозвіл без жодної затримки

- не повинно існувати жодних домовленостей про швидкість процесу

2. Семафори. Семафор (semaphore) подібний взаємному виключенню. Різниця між ними у тому, що семафор може управляти кількістю потоків, які мають до нього доступ.

Семафор встановлюється на граничне число потоків, яким доступ дозволений. Коли це число досягнуте, подальші потоки будуть припинені, поки один або більш потоків не від'єднаються від семафора і не звільнять доступ. Семафор – невід’ємна ціла змінна, яка може змінюватись і перевірятись лише двома функціями:

P(s): [<if<умова>|знач.|><звільнити><s:=s-1>]

V(s): [<if<умова>|знач.|><зайняти><s:=s+1>]

Блокування процесу і перемикання на інший не ефективно, коли семафор захоплюється на дуже короткий час. Очікування звільнення таких семафорів може бути реалізовано в ОС завдяки циклічним опитуванням значень семафору. Недоліки такого «активного очікування» - не продуктивна витрата часу, навантаження на загальну пам'ять і можливість практично заблокувати роботу процесу, що знаходиться в критичному інтервалі. Тобто, якщо об’єкт використовується великою кількістю потоків, використання семафорів не доцільне.



3. Подія – змінна, яка показує що відбулася певна подія.

Для об’явлення події використовується оператор: Post(ім’я змінної) , для очікування : Wait(ім’я змінної). Для очищення (привласнення 0 значення): clear(ім’я змінної).

4. Критична секція.Критичні секції подібні взаємним виключенням по суті, проте між ними існують дві головні відмінності:

· взаємні виключення можуть бути спільно використані потоками в різних процесах, а критичні секції — ні;

· якщо критична секція належить іншому потоку, чекаючий потік блокується аж до звільнення критичної секції. На відміну від цього, взаємне виключення дозволяє продовження після закінчення тайм-ауту.

  1. Обмін повідомленнями. «Взаємодія паралельних процесів».1978р., Хоар.

Мета: позбутись проблему розподілу пам’яті і запропонувати модель взаємодії процесів у розподілених системах.

Використовуються основні функції:

1.Send (destination, message, size) 2. Receive (source, message, size)

Адресатом виступає процес, відправник не специфікується , в його ролі виступає довільний об’єкт.

Механізм семафорів та взаємодії процесів семантично взаємо заміняються . Тому на мультипроцесорах використовується один через інший.





sdamzavas.net - 2020 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...