Создание нового потока
Создание нового потока
Создание нового потока в программном коде осуществляет вызов:
int pthread_create(pthread_t* thread,
const pthread_attr_t* attr, void*(*start_routine)(void*), void* arg);
где thread — NULL или указатель переменной типа pthread_t, значение которой будет загружено идентификатором созданного потока после успешного выполнения функции. Далее это значение (это и есть TID) может использоваться по тексту программы для идентификации созданного потока.
attr — NULL или указатель структуры типа pthread_attr_t. Если это значение NULL, то созданный поток будет иметь набор параметров, устанавливаемых по умолчанию. Если нет, то поток будет создан с параметрами, установленными в структуре attr. Модификация полей attr после создания потока (то есть после вызова функции) не оказывает никакого эффекта на параметры потока, и вообще говоря, структура attr может быть уничтожена сразу же после вызова pthread_create(). Документация предостерегает от прямой манипуляции значениями полей этой структуры, предлагая использовать для этого функции pthread_attr_init() и pthread_attr_set_*().
start_routine — функция типа void*()(void*), уже упоминавшаяся выше как функция потока; это тот код, который будет фактически выполняться в качестве отдельного потока. Если выполнение этой функции завершается по return, то происходит нормальное завершение потока с вызовом pthread_exit(), использующим значение, возвращаемое start_routine в качестве статуса завершения. (Исключением является поток, связанный с main(); он при завершении выполняет вызов exit().)
arg — указатель на блок данных, передаваемых start_routine в качестве входного параметра. Этот параметр подробно рассмотрен далее.
Чаще всего (однако совершенно необязательно) функция потока start_routine представляет собой бесконечный цикл, в котором выполняются некоторые действия с выходом из цикла в том случае, когда нужно завершить выполнение и уничтожить созданный поток. Выглядит это следующим образом:
// функция потока:
void* ThreadProc(void* data) {
while (true) {
// ... выполняется работа ...
if (...) break;
// после этого поток нам уже не нужен!
}
return NULL;
}
После успешного создания нового потока он начинает функционировать «параллельно» с породившим его потоком и другими потоками процесса (если быть совсем точными, то со всеми прочими потоками, существующими в системе, так как в QNX существует только одна стратегия диспетчеризации потоков PTHREAD_SCOPE_SYSTEM, и существует она глобально, на уровне всей системы). При этом после точки выполнения pthread_create() невозможно предсказать, какой поток получит управление: породивший, порожденный или вообще произвольный поток из другого процесса. Это важно учитывать при передаче новому потоку данных и других операциях начальной инициализации параметров внутри созданного потока.
В отличие от создаваемых параллельных процессов, рассмотренных ранее, все потоки, создаваемые в рамках одного процесса, разделяют единое адресное пространство процесса, и поэтому все переменные процесса, находящиеся в области видимости любого потока, доступны этому потоку.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Создание объектов потока: <fo:flows>
Создание объектов потока: <fo:flows> Объекты потока носят такое название потому, что текст в них «заливается» и выравнивается, заполняя страницу, программой, отвечающей за вывод на экран. Содержимое страницы управляется объектами потока.Есть два вида объектов потока:
Создание нового процесса
Создание нового процесса Созданию процессов (имеется в виду создание процесса из программного кода) посвящено столько описаний [1-9], что детальное рассмотрение этого вопроса было бы лишь пересказом. Поэтому мы ограничимся только беглым перечислением этих возможностей,
Создание потока
Создание потока Поток создается при первом открытии с помощью системного вызова специального файла устройства, ассоциированного с драйвером STREAMS. Как правило, процесс создает поток в два этапа: сначала создается элементарный поток, состоящий из нужного драйвера и
15.1. Создание нового проекта
15.1. Создание нового проекта Редактор CAPTURE различает чертежные проекты, проекты разработки топологии, программируемые логические проекты и проекты моделирования. Вам нужно создать проект моделирования.Шаг 1 Запустите редактор CAPTURE из главного меню Windows, щелкнув в пункте
Создание нового документа
Создание нового документа Размеры создаваемого документа могут быть совершенно разными в зависимости от нашей цели. Газеты бывают как формата А3, так и формата А4, а размеры некоторых из них не соответствуют стандартным. Точно так же в зависимости от конкретного издания
Пример: запуск нового потока
Пример: запуск нового потока Альтернативой снятию блокировки сигналом является присваивание sigev_notify значения SIGEV_THREAD, что приводит к созданию нового потока. Функция, указанная в sigev_notify_function, вызывается с параметром sigev_value. Атрибуты нового канала указываются переменной
10.5. Создание класса, считываемого из потока
10.5. Создание класса, считываемого из потока ПроблемаВ поток записан объект некоторого класса и теперь требуется считать эти данные из потока и использовать их для инициализации объекта того же самого класса.РешениеИспользуйте operator>> для чтения данных из потока в ваш
12.1. Создание потока
12.1. Создание потока ПроблемаТребуется создать поток (thread) для выполнения некоторой задачи, в то время как главный поток продолжает свою работу.РешениеСоздайте объект класса thread и передайте ему функтор, который выполняет данную работу. Создание объекта потока приведет к
Создание нового документа
Создание нового документа Создать новый документ в программе Adobe Photoshop можно, выполнив команду File ? New (Файл ? Новый). При этом в специальном окне (рис. 7.1) необходимо указать основные настройки будущего документа: размеры, разрешение, цветовой режим, заполнение документа
Создание нового документа
Создание нового документа Чтобы создать новый файл Word, нажмите Кнопку «Office» и в появившемся меню выполните команду Создать. В результате откроется окно (рис. 2.11), в котором нужно указать режим создания нового документа. Вы можете создать документ либо на основе шаблона,
2.5.2 Создание нового отчета
2.5.2 Создание нового отчета Для создания нового отчета следует выбрать пункт меню File/NewERwin Report или щелкнуть по кнопке на панели инструментов. Появляется диалог ERwin Report Editor (рис. 2.121).В поле Name следует внести имя отчета. Категория отчета (Category) указывает на тип объектов
5.1.1. Создание нового отчета
5.1.1. Создание нового отчета RPTwin является специализированным генераторам отчетов, который позволяет создавать качественные отчеты по моделям процессов и данных. RPTwin входит в поставку как BPwin, так и ERwin. Функциональность RPTwin позволяет создавать не просто отчеты
Создание нового проекта
Создание нового проекта Приступить к процессу создания нового проекта можно тремя разными способами.• Начать построение здания с использованием мастера проектов – самый быстрый, но наименее гибкий способ построения чертежа здания.• Создать проект «с нуля» с
5.1. Создание нового раздела
5.1. Создание нового раздела Как уже было сказано, в реестре имеется пять корневых разделов. Вы не можете создать еще один корневой раздел, однако можете создать раздел в любом из имеющихся корневых разделов (он будет представлять собой раздел первого уровня по отношению к
5.3. Создание нового параметра
5.3. Создание нового параметра Редактор реестра позволяет создавать параметры следующих типов (см. рис. П4.4):? REG_SZ — строковый параметр;? REG_BINARY — двоичный параметр;? REG_DWORD — параметр DWORD;? REG_MULTI_SZ — мультистроковый параметр;? REG_EXPAND_SZ — расширяемый строковый параметр.Параметры