Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Вы можете создать потоки, ведущие себя подобным образом. Они называются отсоединенными или обособленными потоками, и вы создаете их, изменяя атрибуты потока или вызывая функцию
pthread_detach
Самая важная функция, которая вам понадобится, —
pthread_attr_init
<b>#include <pthread.h></b>
<b>int pthread_attr_init(pthread_attr_t *attr);</b>
И снова 0 возвращается в случае успешного завершения и код ошибки в случае аварийного.
Есть и функция для уничтожения:
pthread_attr_destroy
Когда вы инициализировали объект атрибутов потока, можно использовать множество дополнительных функций, с помощью которых задается поведение разных атрибутов. Далее перечислены основные из них (полный список вы можете найти в интерактивном справочном руководстве, в разделе, посвященном pthread.h), но мы рассмотрим подробно только два:
detechedstate
schedpolicy
<b>#include <рthread.h></b>
<b>int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);</b>
<b>int pthread_attr_getdetachstate(const pthread_attr_t *attr,</b>
<b> int *detachstate);</b>
<b>int pthread_attr_setschedpolicy(pthread_attr_t* attr, int policy);</b>
<b>int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int* policy);</b>
<b>int pthread_attr_setschedparam(pthread_attr_t *attr,</b>
<b> const struct sched_param *param);</b>
<b>int pthread_attr_getschedparam(const pthread_attr_t *attr,</b>
<b> struct sched_param *param);</b>
<b>int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit);</b>
<b>int pthread_attr_getinheritsched(const pthread_attr_t *attr,</b>
<b> int *inherit);</b>
<b>int pthread_attr_setscope(pthread_attr_t *attr, int scope);</b>
<b>int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);</b>
<b>int pthread_attr_setstacksize(pthread_attr_t *attr, int scope);</b>
<b>int pthread_attr_getstacksize(const pthread_attr_t *attr, int* scope);</b>
Как видите, существует лишь несколько атрибутов, которые вы можете применять, но к счастью у вас, как правило, не возникнет необходимости в использовании большинства из них.
□
detachedstate
_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
SCHED_FIFO
□
schedparam
schedpolicy
SCHED_OTHER
□
inheritsched
PTHREAD_EXPLICIT_SCHED
PTHREAD_INHERIT_SCHED
PTHREAD_EXPLICIT_SCHED
PTHREAD_INHERIT_SCHED
□
scope
PTHREAD_SCOPE_SYSTEM
□
stacksize
_PTHREAD_THREAD_ATTR_STACKSIZE
Выполните упражнение 12.5.
В примере с отсоединенным или обособленным потоком thread5.c вы создаете атрибут потока, задаете состояние потока как отсоединенное и затем создаете с помощью этого атрибута поток. Теперь, когда закончится дочерний поток, он вызовет обычным образом
pthread_exit
thread_finished
main
#include <stdio.h>