Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція № 5_МЗКІТ (10 ТП).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

Висновки

♦ Потоки одного процесу, що взаємодіють, мають доступ до спільно використовуваних даних, розміщених в адресному просторі цього процесу. Будь-який потік здатний у будь-який момент часу змінити ці дані й спричинити стан змагання, коли результат залежить від послідовності виконання потоків.

♦ Для забезпечення коректного доступу до спільно використовуваних даних застосовують механізми синхронізації потоків; основним з них є забезпечення взаємного виключення, коли в конкретний момент часу доступ до таких даних може мати тільки один потік. Для організації взаємного виключення використовують блокування.

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

♦ Механізмом більш високого рівня є концепція монітора, що поєднує м’ютекси та умовні змінні, а також задає деякі правила їхньої взаємодії для захисту спільно використовуваних даних. Використання моніторів є найпослідовнішим підходом до синхронізації потоків.

Контрольні запитання та завдання

  1. Опишіть проблему, що виникає під час паралельного виконання декількома потоками такого коду:

2. Внаслідок виконання атомарної інструкції SWAP(r,m) міняються місцями дані в регістрі г і комірці пам’яті т. Наведіть приклад реалізації блокування на основі даної інструкції, подібно до того, як це було реалізовано в пп. 5.2.2

з використанням інструкції TSL.

3. Запропонована нова апаратна конструкція з метою вирішення проблеми взаємного виключення — атомарний лічильник. Значення такого лічильника може бути зчитане і збільшене на одиницю за одну атомарну операцію: і = C++. Крім того, внаслідок атомарної операції лічильник можна обнулити. Покажіть, як можна реалізувати взаємне виключення на основі атомарного лічильника.

4. У чому принципова відмінність активного очікування від інших видів очікування, реалізованих в операційній системі?

5. Проаналізуйте виконання коду трьох потоків, що синхронізуються за допомогою семафорів:

а) скільки символів D буде відображено після запуску цих потоків?

б) яка мінімальна кількість символів А буде відображена після запуску цих потоків?

в) як ви вважаєте, чи може внаслідок виконання цих потоків відобразитися рядок CABABDDCABCABD?

г) чи може внаслідок виконання вказаних потоків бути відображений рядок CABACDBCABDD?

6. Два потоки паралельно виконують код:

Спочатку змінним х та у надано значення 0, і м’ютекс відкритий. Всі інструкції обох потоків є атомарними. Назвіть допустимі пари значень, що можуть бути надані змінним х та у внаслідок виконання цих потоків, і відповідні послідовності кроків виконання потоків.

7. Припустімо, що MESA-монітор модифіковано таким чином, що у разі сигналізації умовної змінної поновлюваний потік переміщують у початок черги готових потоків. У випадку припинення або завершення даного потоку планувальник негайно запускає на виконання поновлюваний потік. Чи означає це, що помилкове поновлення стало неможливим?

8. Чи еквівалентні умовні змінні семафорам, які завжди ініціалізуються нулем і мають таку властивість, що потік, який починає очікування на семафорі, звільняє м’ютекс (у цьому випадку операція signal аналогічна up, a wait — down зі звільненням м’ютекса)?

9. Напишіть код таких функцій:

а) send_nmsg( ), що відсилає повідомлення N потокам і припиняє поточний по¬тік, поки усі вони не одержать повідомлення;

б) recv_msg( ), що припиняє даний потік до одержання відісланого за допомогою sendjnmsg( ) повідомлення.

Використовуйте потоки POSIX і Win32. Для потоків Win32 моделюйте умовні змінні з використанням подій.

10. Реалізуйте спільно використовувану динамічну структуру даних (стек, двозв’язний список, бінарне дерево) з використанням потоків POSIX і Win32. Функції доступу до цієї структури даних оформіть, якщо це можливо, у вигляді монітора.

11. Розробіть програму реалізації блокувань читання-записування з перевагою записування. Використайте потоки POSIX. Які труднощі можуть виникнути у разі реалізації таких блокувань для потоків Win32?

64