Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

#include <рthread.h>

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

int pthread_attr_getdetachstate(const pthread_attr_t *attr,

 int *detachstate);

int pthread_attr_setschedpolicy(pthread_attr_t* attr, int policy);

int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int* policy);

int pthread_attr_setschedparam(pthread_attr_t *attr,

 const struct sched_param *param);

int pthread_attr_getschedparam(const pthread_attr_t *attr,

 struct sched_param *param);

int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit);

int pthread_attr_getinheritsched(const pthread_attr_t *attr,

 int *inherit);

int pthread_attr_setscope(pthread_attr_t *attr, int scope);

int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);

int pthread_attr_setstacksize(pthread_attr_t *attr, int scope);

int pthread_attr_getstacksize(const pthread_attr_t *attr, int* scope);

Как видите, существует лишь несколько атрибутов, которые вы можете применять, но к счастью у вас, как правило, не возникнет необходимости в использовании большинства из них.

 

detachedstate
— этот атрибут позволяет избежать необходимости присоединения потоков (rejoin). Как и большинство этих функций с префиксом
_set
, эта функция принимает указатель на атрибут и флаг для определения требуемого состояния. Два возможных значения флага для функции
attr_setdetachstate
PTHREAD_CREATE_JOINABLE
и
PTHREAD_CREATE_DETACHED
. По умолчанию у атрибута будет значение
PTHREAD_CREATE_JOINABLE
, поэтому вы сможете разрешить двум потокам объединяться (один ждет завершения другого). Если задать состояние
PTHREAD_CREATE_DETACHED
, вы не сможете вызвать функцию
pthread_join
, чтобы выяснить код завершения другого потока.

 

schedpolicy
— этот атрибут управляет планированием потоков. Возможные значения —
SCHED_OTHER
,
SCHED_RR
и
SCHED_FIFO
. По умолчанию атрибут равен
SCHED_OTHER
. Два других типа планирования доступны только для процессов, выполняющихся с правами суперпользователя, поскольку они оба задают планирование в режиме реального времени, но с немного разным поведением.
SCHED_RR
использует круговую или циклическую схему планирования, a
SCHED_FIFO
— алгоритм "первым прибыл, первым обслужен". Оба эти алгоритма не обсуждаются в этой книге.

 

schedparam
— это напарник атрибута
schedpolicy
и позволяет управлять планированием потоков, выполняющихся с типом планирования
SCHED_OTHER
. Мы рассмотрим пример его применения чуть позже в этой главе.

 

inheritsched
— этот атрибут принимает одно из двух значений:
PTHREAD_EXPLICIT_SCHED
и
PTHREAD_INHERIT_SCHED
. По умолчанию значение атрибута
PTHREAD_EXPLICIT_SCHED
, что означает планирование, явно заданное атрибутами. Если задать
PTHREAD_INHERIT_SCHED
, новый поток будет вместо этого применять параметры, используемые потоком, создавшим его.

 

scope
— этот атрибут управляет способом вычисления параметров планирования потока. Поскольку ОС Linux в настоящее время поддерживает единственное значение
PTHREAD_SCOPE_SYSTEM
, мы не будем рассматривать его в дальнейшем.

 

stacksize
— этот атрибут управляет размером стека при создании потока, задается в байтах. Это часть необязательного раздела стандарта и поддерживается только в тех реализациях, у которых определено значение
_PTHREAD_THREAD_ATTR_STACKSIZE
. Linux по умолчанию реализует потоки со стеком большого размера, поэтому этот атрибут в ОС Linux избыточен.

Выполните упражнение 12.5.

Упражнение 12.5. Установка атрибута отсоединенного состояния

В примере с отсоединенным или обособленным потоком thread5.c вы создаете атрибут потока, задаете состояние потока как отсоединенное и затем создаете с помощью этого атрибута поток. Теперь, когда закончится дочерний поток, он вызовет обычным образом

pthread_exit
. В это время исходный поток больше не ждет созданный им поток для присоединения. В данном примере используется простой флаг
thread_finished
, чтобы позволить потоку
main
определить, закончился ли дочерний поток, и показать, что потоки все еще совместно используют переменные.

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <pthread.h>

void *thread_function(void *arg);

char message[] = "Hello World";

int thread_finished = 0;

int main {

 int res;

 pthread_t a_thread;

 pthread_attr_t thread_attr;

 res = pthread_attr_init(&thread_attr);

 if (res != 0) {

perror("Attribute creation failed");

exit(EXIT_FAILURE);

 }

 res = pthread_attr_setdetachstate(&thread_attr,

PTHREAD_CREATE_DETACHED);

 if (res != 0) {

perror("Setting detached attribute failed");

exit(EXIT_FAILURE);

Поделиться:
Популярные книги

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Конец детства (сборник)

Кларк Артур Чарльз
Фантастика:
научная фантастика
7.00
рейтинг книги
Конец детства (сборник)

Неучтенный элемент. Том 12

NikL
12. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 12

Я уже князь. Книга XIX

Дрейк Сириус
19. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я уже князь. Книга XIX

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Геном хищника. Книга шестая

Гарцевич Евгений Александрович
6. Я - Легенда!
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Геном хищника. Книга шестая

Московское золото и нежная попа комсомолки. Часть Третья

Хренов Алексей
3. Летчик Леха
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Третья

Бастард Императора. Том 4

Орлов Андрей Юрьевич
4. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 4

Кодекс Императора VI

Сапфир Олег
6. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора VI

Прапорщик. Назад в СССР. Книга 7

Гаусс Максим
7. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 7

Тринадцатый V

NikL
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый V

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2