Читаем UNIX: разработка сетевых приложений полностью

Возвращает: 0 в случае успешного выполнения, положительное значение Exxx в случае ошибки

Эта функция обычно вызывается потоком при необходимости изменить собственный статус в следующем формате:

pthread_detach(pthread_self);

Функция pthread_exit

Одним из способов завершения потока является вызов функции pthread_exit.

#include pthread.h


void pthread_exit(void * status);

Ничего не возвращает вызвавшему потоку

Если поток не является отсоединенным, идентификатор потока и статус завершения сохраняются до того момента, пока какой-либо другой поток данного процесса не вызовет функцию pthread_join.

Указатель statusне должен указывать на объект, локальный по отношению к вызывающему потоку, так как этот объект будет уничтожен при завершении потока.

Существуют и другие способы завершения потока.

 Функция, которая была вызвана потоком (третий аргумент функции pthread_create), может возвратить управление в вызывающий процесс. Поскольку, согласно своему объявлению, эта функция возвращает указатель void, возвращаемое ею значение играет роль статуса завершения данного потока.

 Если функция mainданного процесса возвращает управление или любой поток вызывает функцию exit, процесс завершается вместе со всеми своими потоками.

26.3. Использование потоков в функции str_cli

В качестве первого примера использования потоков мы перепишем нашу функцию str_cli. В листинге 16.6 была представлена версия этой функции, в которой использовалась функция fork. Напомним, что были также представлены и некоторые другие версии этой функции: изначально в листинге 5.4 функция блокировалась в ожидании ответа и была, как мы показали, далека от оптимальной в случае пакетного ввода; в листинге 6.2 применяется блокируемый ввод-вывод и функция select; версии, показанные в листинге 16.1 и далее, используют неблокируемый ввод-вывод.

На рис. 26.1 показана структура очередной версии функции str_cli, на этот раз использующей потоки, а в листинге 26.1 [1]представлен код этой функции.

Рис. 26.1. Измененная функция str_cli, использующая потоки

Листинг 26.1. Функция str_cli, использующая потоки

//threads/strclithread.c

 1 #include "unpthread.h"


 2 void *copyto(void*);


 3 static int sockfd; /* глобальная переменная, доступная обоим потокам */

 4 static FILE *fp;


 5 void

 6 str_cli(FILE *fp_arg, int sockfd_arg)

 7 {

 8  char recvline[MAXLINE];

 9  pthread_t tid;


10  sockfd = sockfd_arg; /* копирование аргументов во внешние переменные */

11  fp = fp_arg;


12  Pthread_create(tid, NULL, copyto, NULL);


13  while (Readline(sockfd, recvline. MAXLINE) 0)

14   Fputs(recvline, stdout);

15 }


16 void*

17 copyto(void *arg)

18 {

19  char sendline[MAXLINE];


20  while (Fgets(sendline, MAXLINE, fp) != NULL)

21   Writen(sockfd, sendline, strlen(sendline));


22  Shutdown(sockfd, SHUT_WR); /* признак конца файла в стандартном

                                  потоке ввода, отправка сегмента FIN */

23  return (NULL);

24  /* завершение потока происходит, когда в стандартном потоке ввода

       встречается признак конца файла */

25 }

Заголовочный файл unpthread.h

1Мы впервые встречаемся с заголовочным файлом unpthread.h. Он включает наш обычный заголовочный файл unp.h, затем — заголовочный файл POSIX pthread.h, и далее определяет прототипы наших потоковых функций-оберток для pthread_XXX(см. раздел 1.4), название каждой из которых начинается с Pthread_.

Сохранение аргументов во внешних переменных

10-11 Для потока, который мы собираемся создать, требуются значения двух аргументов функции str_cli: fp — указатель на структуру FILEдля входного файла, и sockfd— сокет TCP, связанный с сервером. Для простоты мы храним эти два значения во внешних переменных. Альтернативой является запись этих двух значений в структуру, указатель на которую затем передается в качестве аргумента создаваемому потоку.

Создание нового потока

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT
Недокументированные и малоизвестные возможности Windows XP
Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. Р' ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows. Тем более что довольно часто эти возможности позволяют обойти ограничения на те или иные функции Windows, установленные администратором. Р

Роман Александрович Клименко

ОС и Сети, интернет / ОС и Сети / Книги по IT