Листинг 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 }