Чтение онлайн

на главную - закладки

Жанры

UNIX: взаимодействие процессов

Стивенс Уильям Ричард

Шрифт:

Функция pthread_detach делает данный поток отсоединенным:

#include <pthread.h>

int pthread_detach(pthread_t tid);

/* Возвращает 0 в случае успешного завершения, положительное значение Еххх в случае ошибки */

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

pthread_detach(pthread_self);

Функция pthread_exit

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

#include <pthread.h>

void pthread_exit(void *status);

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

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

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

Поток может быть завершен двумя другими способами:

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

■ функция main процесса может завершить работу или один из потоков может вызвать exit или _exit. При этом процесс завершает работу немедленно, вместе со всеми своими потоками.

ПРИЛОЖЕНИЕ В

Вспомогательные исходные коды

В.1. Заголовочный файл unpipc.h

Почти все программы книги подключают заголовочный файл unpipc.h, приведенный в листинге В.1. [1] Он подключает все стандартные системные заголовки, нужные большинству пpoгрaмм для работы с сетью, вместе с некоторыми общими системными заголовками. Он также определяет константы типа MAXLINE и прототипы функций ANSI С для функций, определенных в тексте (типа px_ipc_name), и для всех используемых в книге оберток. Мы не приводим эти прототипы.

1

Все исходные тексты, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com/download.

Листинг В.1. Заголовочный файл unpipc.h

//lib/unpipc.h

1 /* Наш заголовочный файл. */

2 #ifndef __unpipc_h

3 #define __unpipc_h

4 #include "../config.h" /* параметры конфигурации ОС */

5 /* "../config.h" создается сценарием configure */

6 /* изменяя список директив #include, нужно изменять файлы

7 ../aclocal.m4 и ../configure.in. чтобы работал сценарий configure */

8 #include <sys/types.h> /* базовые типы данных */

9 #include <sys/time.h> /* структура timeval{} для select */

10 #include <time.h> /* timespec{} для pselect */

11 #include <errno.h>

12 #include <fcntl.h> /* отключение блокировки */

13 #include <limits.h> /* PIPE_BUF */

14 #include <signal.h>

15 #include <stdio.h>

16 #include <stdlib.h>

17 #include <string.h>

18 #include <sys/stat.h> /* константы режима доступа к файлу S_xxx */

19 #include <unistd.h>

20 #include <sys/wait.h>

21 #ifdef HAVE_MQUEUE_H

22 #include <mqueue.h> /* очереди сообщений Posix */

23 #endif

24 #ifdef HAVE_SEMAPHORE_H

25 #include <semaphore.h> /* семафоры Posix */

26 #ifndef SEM_FAILED

27 #define SEM_FAILED ((sem_t *)(-1))

28 #endif

29 #endif

30 #ifdef HAVE_SYS_MMAN_H

31 #include <sys/mman.h> /* разделяемая память Posix */

32 #endif

33 #ifndef MAP_FAILED

34 #define MAP_FAILED ((void *)(-1))

35 #endif

36 #ifdef HAVE_SYS_IPC_H

37 #include <sys/ipc.h> /* System V IPC */

38 #endif

39 #ifdef HAVE_SYS_MSG_H

40 #include <sys/msg.h> /* очереди сообщений System V */

41 #endif

42 #ifdef HAVE_SYS_SEM_H

43 #ifdef __bsdi__

44 #undef HAVE_SYS_SEM_H /* тонкий момент: прототип semctl в BSDI's содержит ошибки*/

45 #else

46 #include <sys/sem.h> /* семафоры System V */

47 #endif

48 #ifndef HAVE_SEMUN_UNION /* $$.It semun$$ */

49 union semun { /* определение объединения для semctl */

50 int val;

51 struct semid_ds *buf;

52 unsigned short *array;

Поделиться:
Популярные книги

Паразиты

дю Морье Дафна
Проза:
современная проза
6.20
рейтинг книги
Паразиты

Подросток

Достоевский Федор Михайлович
Проза:
русская классическая проза
9.09
рейтинг книги
Подросток

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Черный Маг Императора 12

Герда Александр
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 12

Звездная Кровь. Экзарх III

Рокотов Алексей
3. Экзарх
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Экзарх III

Эволюционер из трущоб. Том 11

Панарин Антон
11. Эволюционер из трущоб
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 11

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Князь Медведев. Дилогия

Вяч Павел
Медведев
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Князь Медведев. Дилогия

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25