Page 153 - 6571
P. 153

pthread_t tid; /* дескриптор потоку */

                  По-третє,  необхідно  ініціалізувати  атрибути,  викликавши

            функції:

                  pthread_attr_init(&tattr);
                  pthread_attr_setscope (&tattr, PTHREAD_SCOPE_SYSTEM);
                  І  по-четверте  потрібно  створити  самі  потоки.  Перед

            створенням потоку визначаються його початкові атрибути, деякі
            з яких пізніше можна змінити за допомогою функцій керування
            потоками. Атрибути потоку включають розмір стека потоку, його

            пріоритет  і  область  планування  (локальна  або  глобальна).
            Зазвичай  достатньо  значень  атрибутів,  встановлених  за
            замовчуванням,  за  винятком  області  планування.  Досить  часто

            необхідно,  щоб  планування  потоку  відбувалося  глобально,  а  не
            локально,  тобто  щоб  потік  конкурував  за  процесор  зі  всіма
            потоками, а не тільки із батьківським потоком, що його створив.

            Виклик  функції  pthread_attr_setscope  враховує  дану
            необхідність.  Новий  потік  створюється  викликом  функції
            pthread_create:

                  pthread_create(&tid, &tattr, start_func, arg);

                  Перший  аргумент  –  це  адрес  дескриптора  потоку,  що
            заповнюється при його успішному створенні. Другий представляє

            адрес дескриптора атрибутів потоку. Новий потік починає роботу
            з виклику функції start_func з єдиним аргументом arg. Якщо
            потік створений успішно, то функція pthread_create повертає

            значення 0.
                  Для завершення роботи потоку необхідно викликати функцію:

                  pthread_exit(value);

                  Параметр  value  –  це  скалярне  значення  (або  NULL).
            Процедура  exit  викликається  неявно,  якщо  потік  повертає
            керування з функції, виконання якої він почав.

                  Батьківський процес може очікувати завершення роботи до-
            чірнього процесу, викликаючи функцію:

                  pthread_join(tid, value_ptr);

            де tid – дескриптор дочірнього процесу, а параметр value_ptr

            – адреса змінної в яку поміщаєть значення, що повертає потік під
            час виклику функції exit.

                                                        152
   148   149   150   151   152   153   154   155   156   157   158