ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Созданиеизавершение thread'а. Функции pthread_create(), pthread_exit(), pthread_join().Нити исполнения, как и традиционные процессы, могут порождать нити-потомки, правда, только внутри своего процесса. Каждый будущий thread внутри программы должен представлять собой функцию с прототипом void *thread(void *arg); Параметр arg передается этой функции при создании thread'a и может, до некоторой степени, рассматриваться как аналог параметров функции main(). Возвращаемое функцией значение может интерпретироваться как аналог информации, которую родительский процесс может получить после завершения процесса-ребенка. Для создания новой нити исполнения применяется функция pthread_create(). Мы не будем рассматривать ее в полном объеме, так как детальное изучение программирования с использованием thread'ов не является целью данного курса. Важным отличием этой функции от большинства других системных вызовов и функций является то, что в случае неудачного завершения она возвращает не отрицательное, а положительное значение, которое определяет код ошибки, описанный в файле errno.h. Значение системной переменной errno при этом не устанавливается. Результатом выполнения этой функции является появление в системе новой нити исполнения, которая будет выполнять функцию, ассоциированную со thread'ом, передав ей специфицированный параметр, параллельно с уже существовавшими нитями исполнения процесса. Созданный thread может завершить свою деятельность тремя способами: · С помощью выполнения функции pthread_exit(). Функция никогда не возвращается в вызвавшую ее нить исполнения. Объект, на который указывает параметр этой функции, может быть изучен в другой нити исполнения, например, в породившей завершившийся thread. Этот параметр, следовательно, должен указывать на объект, не являющийся локальным для завершившегося thread'а, например, на статическую переменную. · С помощью возврата из функции, ассоциированной с нитью исполнения. Объект, на который указывает адрес, возвращаемый функцией, как и в предыдущем случае, может быть изучен в другой нити исполнения, например, в породившей завершившийся thread, и должен указывать на объект, не являющийся локальным для завершившегося thread'а. · Если в процессе выполняется возврат из функции main() или где-либо в процессе (в любой нити исполнения) осуществляется вызов функции exit(), то это приводит к завершению всех thread'ов процесса. Одним из вариантов получения адреса, возвращаемого завершившимся thread'ом, с одновременным ожиданием его завершения является использование функции pthread_join(). Нить исполнения, вызвавшую эту функцию, переходит в состояние ожидание до завершения заданного thread'а. Функция позволяет также получить указатель, который вернул завершившийся thread в операционную систему. Не нашли, что искали? Воспользуйтесь поиском:
|