Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Запуск потока



Читайте также:
  1. В ПОИСКАХ ПОТОКА
  2. Взрывная волна при запуске сервитора
  3. Вибір елементів запуску (R1, R2).
  4. ВОПРОС 14. Меры борьбы с пульсацией светового потока в осветительных установках
  5. ВОПРОС 16. Расчет электрического освещения с люминесцентными лампами по методу коэффициента использования светового потока.
  6. Второй шаг— абсолютное участие. Постарайтесь стать каналом, пропускающим через себя поток энергии и предлагающим миру новую интерпретацию этого потока.
  7. ГИДРАВЛИЧЕСКИЕ ЭЛЕМЕНТЫ ЖИВОГО СЕЧЕНИЯ ПОТОКА

 

Теперь, когда мы знаем, как запустить другой процесс, давайте рассмотрим, как осуществить запуск другого потока.

Любой поток может создать другой поток в том же самом процессе; на это не налагается никаких ограничений (за исключением объема памяти, конечно!) Наиболее общий путь реализации этого — использование вызова функций 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 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.006 сек.)