exit
任何一个线程调用exit都会导致进程结束(进程一旦结束,进程中的所有线程都会结束)
atexit
通过atexit注册的方法,可以在程序正常退出(exit)时进行执行。
- 注册的方法为无参数、无返回值的方法。
- atexit最多可以注册32个方法。
- exit函数调用后,执行顺序和注册的顺序相反,也就是说最后注册的方法先执行。
- 同一个方法注册多次会执行多次
demo
// gcc demo.cpp -lpthread
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
void func() {
printf("hello world\n");
}
int add(int a, int b) {
return a + b;
}
void *fun() {
printf("thread\n");
// pthread_exit(NULL); //调用pthread_exit函数退出线程
printf("test!\n");
atexit(func);
int ret = add(1, 2);
exit(ret);
}
int main() {
pthread_t id;
int t = pthread_create(&id,NULL,(void* (*)(void*))&fun,NULL);
if(0 != t) {
perror("pthread_create fail");
exit(errno);
}
pthread_join(id,NULL); //等待线程执行返回
printf("main\n");
exit(0);
return 0;
}
// gcc demo.cpp -lpthread
thread
test!
hello world
参考
[1] http://blog.sina.com.cn/s/blog_605f5b4f0100x3v0.html
[2] https://blog.csdn.net/qq_34352738/article/details/78307116