【C言語】【unix c】スレッドの終了、合流、分離
、 , ,
1、
return 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;
}