Основы программирования в 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), но мы рассмотрим подробно только два:
detechedstateschedpolicy<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_setattr_setdetachstatePTHREAD_CREATE_JOINABLEPTHREAD_CREATE_DETACHEDPTHREAD_CREATE_JOINABLEPTHREAD_CREATE_DETACHEDpthread_join□
schedpolicySCHED_OTHERSCHED_RRSCHED_FIFOSCHED_OTHERSCHED_RRSCHED_FIFO□
schedparamschedpolicySCHED_OTHER□
inheritschedPTHREAD_EXPLICIT_SCHEDPTHREAD_INHERIT_SCHEDPTHREAD_EXPLICIT_SCHEDPTHREAD_INHERIT_SCHED□
scopePTHREAD_SCOPE_SYSTEM□
stacksize_PTHREAD_THREAD_ATTR_STACKSIZEВыполните упражнение 12.5.
В примере с отсоединенным или обособленным потоком thread5.c вы создаете атрибут потока, задаете состояние потока как отсоединенное и затем создаете с помощью этого атрибута поток. Теперь, когда закончится дочерний поток, он вызовет обычным образом
pthread_exitthread_finishedmain#include <stdio.h>
