linux——回收子线程

张开发
2026/4/7 2:47:36 15 分钟阅读

分享文章

linux——回收子线程
阻塞等待线程退出获取线程退出状态--pthread_join函数原型 int pthread_join(pthread_t pthread, void **retval) 参数 pthread:要回收的子线程的ID retval:读取线程退出的携带信息 传出参数 void* ptr; pthread_join(pthid,ptr) 指向的内存和pthread_exit参数指向地址一致#includestdio.h #includepthread.h #includeunistd.h #includestring.h #includestdlib.h void* myreturn() { return NULL; } void* myfunc(void *arg) { printf(child pthread id:%ld\n,pthread_self()); for(int i0;i5;i) { printf(child pthread %d\n,i); if(i2) { int num 100; pthread_exit(num); } } return 0; } int main() { pthread_t pthid; int ret; ret pthread_create(pthid,NULL,myfunc,NULL); if(ret ! 0) { printf(error number is %d\n,ret); printf(%s\n,strerror(ret)); } printf(parent pthread id:%ld\n,pthread_self()); void* ptrNULL; pthread_join(pthid,ptr); printf(num %d\n,*(int *)ptr); int i0; while(i10) { i; printf(parent pthread %d\n,i); } sleep(2); return 0; }这里面打印的num是一个随机值但是我们给num赋值100了呀为什么回收完还要打印随机值呢这是因为在用pthread‐exit(void *retval)里面的指针必须指向全局或者堆区的才可以而我们赋值的int num100在子线程所以打印不出来#includestdio.h #includepthread.h #includeunistd.h #includestring.h #includestdlib.h void* myreturn() { return NULL; } int num 100; void* myfunc(void *arg) { printf(child pthread id:%ld\n,pthread_self()); for(int i0;i5;i) { printf(child pthread %d\n,i); if(i2) { pthread_exit(num); } } return 0; } int main() { pthread_t pthid; int ret; ret pthread_create(pthid,NULL,myfunc,NULL); if(ret ! 0) { printf(error number is %d\n,ret); printf(%s\n,strerror(ret)); } printf(parent pthread id:%ld\n,pthread_self()); void* ptrNULL; pthread_join(pthid,ptr); printf(num %d\n,*(int *)ptr); int i0; while(i10) { i; printf(parent pthread %d\n,i); } sleep(2); return 0; }这样就可以打印出来了

更多文章