linux——退出单一线程
pthread_exitexit(0)函数原型 void pthread‐exit(void *retval) retval指针必须指向全局堆#includestdio.h #includepthread.h #includeunistd.h #includestring.h #includestdlib.h void* myfunc(void *arg) { printf(child pthread id:%ld\n,pthread_self()); for(int i0;i5;i) { printf(child pthread %d\n,i); } 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()); pthread_exit(NULL); for(int i0;i5;i) { printf(parent pthread %d\n,i); } sleep(2); return 0; }在主线程里调用pthread_exit(NULL)作用只退出当前主线程进程不会结束。结果主线程挂了但进程里还有子线程活着所以子线程继续跑。#includestdio.h #includepthread.h #includeunistd.h #includestring.h #includestdlib.h 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) { exit(0); } } 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()); for(int i0;i5;i) { printf(parent pthread %d\n,i); } pthread_exit(NULL); sleep(2); return 0; }这里子线程循环到2是exit退出了整个进程#includestdio.h #includepthread.h #includeunistd.h #includestring.h #includestdlib.h 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) { exit(0); } } 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()); int i0 while(1) { i; printf(parent pthread %d\n,i); } pthread_exit(NULL); sleep(2); return 0; }这段代码就证明了exit退出了整个进程#includestdio.h #includepthread.h #includeunistd.h #includestring.h #includestdlib.h 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(NULL); } } 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()); int i0 while(1) { i; printf(parent pthread %d\n,i); } pthread_exit(NULL); sleep(2); return 0; }将exit换成pthread_exit就可以只退出子线程不退出主线程了也可以将pthread_exit(NULL)换为return NULL效果也是一样的还可以在子线程里调用个函数#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) { myreturn(); } } 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()); int i0 while(1) { i; printf(parent pthread %d\n,i); } pthread_exit(NULL); sleep(2); return 0; }效果也是一样的
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2491232.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!