на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 15.18. Функции управления потоками

//doors/server6.c

13 pthread_mutex_t fdlock = PTHREAD_MUTEX_INITIALIZER;

14 static int fd = –1; /* дескриптор двери */


15 void *

16 my_thread(void *arg)

17 {

18  int oldstate;

19  door_info_t *iptr = arg;

20  if ((Door_server_proc*)iptr->di_proc == servproc) {

21   Pthread_mutex_lock(&fdlock);

22   Pthread_mutex_unlock(&fdlock);

23   Pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);

24   Door_bind(fd);

25   Door_return(NULL, 0, NULL, 0);

26  } else

27   err_quit("my_thread: unknown function: %p", arg);

28  return(NULL); /* никогда не выполняется */

29 }


30 void

31 my_create(door info_t *iptr)

32 {

33  pthread_t tid;

34  pthread_attr_t attr;

35  Pthread_attr_init(&attr);

36  Pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

37  Pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

38  Pthread_create(&tid, &attr, my_thread, (void *)iptr);

39  Pthread_attr_destroy(&attr);

40  printf("my_thread: created server thread %ld\n", pr_thread_id(&tid)):

41 }


Листинг 15.17. Функция main для примера с управлением пулом потоков | UNIX: взаимодействие процессов | Процедура создания сервера