【C言語】【unix c】スレッドの終了、合流、分離

10313 ワード

 、     ,  ,  
    1return exit   
            return       ,             , exit       ,           
                       exit
        pthread_exit(3)
                pthread_exit(3)       
                #include <pthread.h>
                void pthread_exit(void *retval);
                      :      :
                      :
                        retval:             ,      pthread_join(3)     
                       :       
                      : Compile and link with -pthread.

            void *doit(void *arg) {//u     
                printf("pid:%d\ttid:%lu\t%s
"
,getpid(),pthread_self(),(char*)arg); //return NULL; pthread_exit((void *-1); } pthread_cancel(3): #include <pthread.h> int pthread_cancel(pthread_t thread); : , , , : thread: id : 0 0 : pthread_cancel(3) , pthread_join(3) , PTHREAD_CANCELED 2、 : thread_join(3) #include <pthread.h> int pthread_join(pthread_t thread, void **retval); : : thread: id **retval: :0 Compile and link with -pthread. : (pthread_e.c) #include <stdio.h> #include <pthread.h> // void *doit(void *arg){ printf("new thread...
"
); pthread_exit((void *)1); } void *doit1(void *arg){ printf("doit1 thread...
"
); return ((void *)2); } void *doit2(void *arg){ while(1){ sleep(1); printf("doit2 run...
"
); } } int main(void){ pthread_t tid; void *retval; // pthread_create(&tid,NULL,doit,NULL); // pthread_join(tid,&retval); // printf("exit code ...%d
"
,(int)retval); // pthread_create(&tid,NULL,doit1,NULL); // pthread_join(tid,&retval); // printf("exit code ...%d
"
,(int)retval); // pthread_create(&tid,NULL,doit2,NULL); sleep(3); pthread_cancel(tid); // , , // pthread_join(tid,&retval); if(retval==PTHREAD_CANCELED){ // printf("doit2 exit code ...%d
"
,\ (int)retval); } return 0; } tarena@ubuntu:~/day/day36$ gcc pthread_e.c -lpthread tarena@ubuntu:~/day/day36$ a.out new thread... exit code ...1 doit1 thread... exit code ...2 doit2 run... doit2 run... doit2 exit code ...-1 3、 pthread_detach(3) #include <pthread.h> int pthread_detach(pthread_t thread); : thread: :0 Compile and link with -pthread. :pthread_d.c #include <pthread.h> #include <stdio.h> void *doit(void *arg){ printf("arg...
"
); sleep(1); return NULL; } int main(void){ pthread_t tid; pthread_create(&tid,NULL,doit,NULL); pthread_detach(tid); // sleep(1); return 0; }