Читайте также:
|
|
Теперь, когда мы знаем, как запустить другой процесс, давайте рассмотрим, как осуществить запуск другого потока.
Любой поток может создать другой поток в том же самом процессе; на это не налагается никаких ограничений (за исключением объема памяти, конечно!) Наиболее общий путь реализации этого — использование вызова функций pthread_create():
#include <pthread.h>
int int
pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
Функция pthread_create() имеет четыре аргумента:
· thread - указатель на pthread_t, где хранится идентификатор потока;
· attr - атрибутная запись;
· start_routine - подпрограмма, с которой начинается поток;
· arg - параметр, который передается подпрограмме start_routine.
Отметим, что указатель thread и атрибутная запись (attr) — необязательные элементы, вы можете передавать вместо них NULL.
Параметр thread может использоваться для хранения идентификатора вновь создаваемого потока. Обратите внимание, что в примерах, приведенных ниже, мы передадим NULL, обозначив этим, что мы не заботимся о том, какой идентификатор будет иметь вновь создаваемый поток.
Если бы нам было до этого дело, мы бы сделали так:
pthread_t tid;
pthread_create (&tid,...
printf («Новый поток имеет идентификатор %d\n», tid);
Такое применение совершенно типично, потому что вам часто может потребоваться знать, какой поток выполняет какой участок кода.
Небольшой тонкий момент. Новый поток может начать работать еще до присвоения значения параметру tid. Это означает, что вы должны внимательно относиться к использованию tid в качестве глобальной переменной. В примере, приведенном выше, все будет корректно, потому что вызов pthread_create() отработал до использования tid, что означает, что на момент использования tid имел корректное значение.
Новый поток начинает выполнение с функции start_routine (), с параметром arg.
Дата добавления: 2015-07-11; просмотров: 131 | Нарушение авторских прав