Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / Answers (20-40).docx
Скачиваний:
212
Добавлен:
15.06.2014
Размер:
38.2 Кб
Скачать

28. Создание нитей (thread) в программахWindows.

Главная нить процесса создается автоматически при создании процесса. Если процесс нуждается в доп-х нитях, то его прога вызывает системные ф-ции создания нити.

Наиболее сложная ситуация оказывается с порождением нитей в операционных системах Windows. И дело все в том, что для порождения нитей в этих системах имеется не одна функция, а несколько. Самой ранней является системная функция CreateThread, но в ее реализации при использовании на языке программирования Си позже были обнаружены некоторые проблемы некорректного поведения и было предложено заменить ее функцией _begintread.

К настоящему времени наиболее безопасными функциями порождения нитей являются _beginthreadNT и _beginthreadex, именно их и рассмотрим в первую очередь, предлагая для ближайшего использования.

unsigned long _beginthreadex(void* security_attrib, unsigned stack_size, unsigned (*proc)(void*), void *arglist, unsigned flag, unsigned *tid)

unsigned long _beginthreadNT(void (*proc)(void *), unsigned stack_size, void *arglist, void *security_attrib, unsigned long flags, unsigned long *tid)

proc – процедура нити

stack_size – размер стека, практически округляется до 4096

arglist – указатель на строку аргументов

security_attrib – применятеся в сложных программах

flags – служит для приостанвления только что созданной нити

tid – указатель на идентификатор

Исходной системной функцией для построения всех описанных функций создания нитей в Windows служит функция CreateThread, которой можно пользоваться в тех программах, процедуры задания нитей которых не содержат стандартных функций базовой библиотеки языка Си и неявно не используют их.

29. Создание posiXнитей в программе.

Главная нить процесса создается автоматически при создании процесса. Если процесс нуждается в дополнительных нитях, то его программа вызывает системные функции создания нити.

В операционной системе Unix многопоточное программирование появилось достаточно поздно. К настоящему времени эта возможность входит в стандарт POSIX для Unix и поддерживается во всех современных ОС. Использование нитей при этом требует подключения заголовочного файла pthread.h. Системная функция создания нити в Unix по указанному стандарту имеет прототип

Int pthread_create(pthread_t* tid, const pthread_attr_t* att, void*(*fun)(void*), void* argp)

tid – возвращает идентификатор созданной нити

att – задание атрибутов отличных от умолчания

fun - адрес процедуры нити

arg - для передачи конкретного аргумента при создании нити

Если функци создания нити возвращает значение >0, то в ходе выполнения системной функции произошла ошибка, и нить не была создана. Эту ситуацию рекомендуется анализировать в программе. Нулевое возвращаемое значение соответствует безошибочному выполнению, а положительное значение выдает непосредственно числовое значение кода ошибки. Для завершения:

Int pthread_exit(void *status)

Указанная функция требуется только, если эта нить должна передавать код завершения или при задании завершения внутри программы процедуры. На конечном месте процедуры вызов функции завершения можно опускать.

Соседние файлы в папке Экзамен