Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Багатопоточність у С/C++

Автор:   •  Декабрь 29, 2023  •  Практическая работа  •  1,584 Слов (7 Страниц)  •  142 Просмотры

Страница 1 из 7

Міністерство  освіти  і  науки України

Вінницький національний технічний університет

Факультет інтелектуальних інформаційних технологій та автоматизації

Кафедра Комп’ютерних наук

Практична робота №2

з дисципліни «Технології розподілених систем та паралельних обчислень»

Тема: «Багатопоточність у С/C++»

Виконала: студентка групи 2КН-21б:                            Демюк Д.Я.

Перевірив: доцент:                                                               Денисюк В.О.

Вінниця, 2023р

Практична робота №2

Мета: Практичне вивчення поняття потоку виконання, операцій над потоками і стандартних засобів синхронізації. Ознайомлення з моделями взаємодії потоків.

Основні теоретичні відомості

У багатьох завданнях можна виділити ряд підзадач, кожну з яких можливо вирішити або незалежно від інших підзадач, або з їх мінімальною кооперацією. При цьому підзадачі виконуються конкурентно (в однопроцесорній системі) або паралельно в многопроцессорной системі. В багатопотоковій моделі кожна така підзадача існує як індивідуальний потік виконання всередині одного і того ж процесу. При цьому процес ділиться на дві частини. Одна частина містить ресурси, використовувані через всю програму, такі як програмний код і глобальні дані. Інша містить інформацію, що відноситься до стану виконання.
        В операційній системі GNU / Linux підтримка потоків забезпечена певним набором типів мови програмування С і набором функцій для виконання операцій над потоками. Підтримка потоків виконання реалізована у вигляді набору заголовків файлів і бібліотеки, яка підключається до програми на етапі її компонування. Прототипи більшості функцій для маніпуляції з потоками описуються у файлі pthread.h. Нижче наводяться прототипи найбільш часто використовуваних функцій разом з поясненням їх синтаксису і виконуваних ними дій.
         int pthread_create(pthread_t* thread, const pthread_attr_t* attr, void* (*routine) (void*), void* arg); - створює потік з атрибутами, зазначеними в attr. При передаванні 0 в якості attr будуть використані атрибути по замовчуванню, які підходять для більшості випадків. У вихідний параметр thread заноситься дескриптор створеного потоку. Створений потік виконує зазначену функцію routine, якій при виклику буде передано значення параметра arg. void pthread_exit (void *value); - Завершує потік, який викликається і повертає значення value потоку, що очікує завершення даного потоку. pthread_t pthread_self (); - Повертає дескриптор потоку, який викликав.
         int pthread_join (pthread_t thread, void** value_ptr); - Переводить викликає потік в стан очікування завершення зазначеного потоку thread. В параметр value_ptr (якщо він відмінний від 0) заноситься результат виконання завершеного потоку.
2. Засоби синхронізації потоків
        Як відомо, в рамках програми всі потоки виконуються в одному адресному просторі. У зв'язку з цим постає проблема спільного використання загальних
змінних. Для її вирішення потрібні кошти, які дозволяють розмежувати доступ потоків до таких поділюваних змінних, або до ресурсів, оскільки в один момент часу тільки єдиний потік повинен працювати з певним ресурсом. Сформульована задача має назву забезпечення взаємовиключення, а ділянки програмного коду, в яких потоки виконують операції з ресурсами, які розділяються, називаються критичними секціями.
З іншого боку, потокам може знадобитися кооперація не по данним, а по виконуваним діям. Прикладом такої кооперації є ситуація, при якій потоку для продовження своєї роботи потрібен результат виконання іншого потоку.      
        У наведеному випадку потік повинен синхронізувати свої дії з іншим(и) потоками по готовності даних. Іншим прикладом кооперації по діям є необхідність виконання деякої операції тільки одним з багатьох потоків, причому яким з них апріорно невідомо. Для вирішення розглянутих завдань та інших, подібних їм, використовуються спеціальні засоби синхронізації потоків. Основні з них – це м'ютекси, семафори і умовні змінні.              Синхронізація та взаємовиключення забезпечуються за рахунок атомарності виконуваних операцій над м'ютексами і семафорами. Атомарної називають операцію, яка не може бути перервана в ході свого виконання.
        М'ютекс дозволяє потокам управляти доступом до даних. При використанні мьютекса тільки один потік в певний момент часу може заблокувати мьютекс і отримати доступ до ресурсу («ліцензію» на його використання).
        При завершенні роботи з ресурсом потік повинен повернути «ліцензію», розблокувавши мьютекс. Якщо який-небудь потік звернеться до вже заблокованого м'ютексу, то він буде змушений чекати розблокування мьютекса потоком, що володіє їм.
        Прототипи функцій для виконання операцій над м'ютексами описуються у файлі pthread.h. Нижче наводяться прототипи найбільш часто

...

Скачать:   txt (18 Kb)   pdf (129.9 Kb)   docx (45.3 Kb)  
Продолжить читать еще 6 страниц(ы) »
Доступно только на Essays.club