Page 121 - 4868
P. 121

119                                                              Ошибка! Стиль не определен.



                                           ЗМІСТОВИЙ МОДУЛЬ 2.
                      СУЧАСНІ ПІДХОДИ ДО РОЗРОБКИ ПАРАЛЕЛЬНИХ

                                                      ПРОГРАМ



                             ЛЕКЦІЯ 17. ОСНОВИ РОБОТИ З БІБЛІОТЕКОЮ
                                                   POSIXTHREADS


                     17.1. Створення нового потоку виконання

                     Згадаємо, що потік – це «полегшений» процес, тобто процес з власним
               програмним  лічильником  і  стеком  виконання,  але  без  «важкого»  контексту
               (таблиць  сторінок),  пов’язаного  з  роботою  програми.  Деякі  операційні
               системи  давно  надавали  механізми,  що  дозволяють  розробникам  писати
               багатопотокові програми. Але дані механізми відрізнялися між собою, тому
               додатки не можна було переносити між різними операційними системами або
               навіть між різними типами однієї операційної системи. Тому, щоб виправити
               дану  ситуацію,  в  середині  1990-х  років  було  визначено  стандартний  набір
               функцій мови C для багатопотокового програмування. Група розробників, що
               розробляла  даний  набір  функцій  працювала  під  керівництвом  організації
               POSIX  (Portable  Operating  System  Interface),  тому  бібліотеку  було  названо
               Pthreads  для  потоків  POSIX.  На  сьогоднішній  час  дана  бібліотека  широко
               використовується і доступна для самих різних типів операційних систем.
                     Бібліотека Pthreads включає в себе ряд функцій для управління потоками
               і  їх  синхронізації.  Розглянемо  базовий  набір  функцій,  достатній  для
               створення і взаємодії потоків, а також для синхронізації їх роботи.
                     Для  доступу  до  бібліотеки  Pthreads  в  програмі  на  мові  C  потрібно
               виконати  чотири  дії.  По-перше,  необхідно  підключити  стандартний
               заголовний файл бібліотеки Pthreads:
                     #include <pthread.h>

                     По-друге, потрібно оголосити змінні для одного дескриптора атрибутів
               потоку і одного або декількох дескрипторів потоку:

                     pthread_attr_t tattr; /* атрибути потоку */
                     pthread_t tid; /* дескриптор потоку */

                     По-третє, необхідно ініціалізувати атрибути, викликавши функції:
                     pthread_attr_init(&tattr);
                     pthread_attr_setscope (&tattr, PTHREAD_SCOPE_SYSTEM);

                     І по-четверте потрібно створити самі потоки. Перед створенням потоку
               визначаються його початкові атрибути, деякі з яких пізніше можна змінити за
               допомогою  функцій  керування  потоками.  Атрибути  потоку  включають
               розмір  стека  потоку,  його  пріоритет  і  область  планування  (локальна  або
               глобальна).  Зазвичай  достатньо  значень  атрибутів,  встановлених  за
               замовчуванням,  за  винятком  області  планування.  Досить  часто  необхідно,
   116   117   118   119   120   121   122   123   124   125   126