终止线程
方法1:从线程入口函数中return,主线程除外。
方法2:调用pthread_exit函数。
void pthread_exit (void* retval); retval - 和线程过程函数的返回值语义相同。
注意:在任何线程中调用exit函数都将终止整个进程。
问题:主线程结束,子线程是否会跟着一起结束?
主线程结束,并不会导致子线程跟着一起结束,它们之间没有必然联系。
但是,主线程如果执行到最后一行,会执行return 0或隐藏的return 0,而在main函数中执行return 0就相当于执行exit(0),然后当前进程就会结束,有两种方法可以避免这种情况:
方法1:
等待所有子线程结束,主线程再执行return 0;
子线程在一定时间内会结束,侧使用pthread_join。
方法2:
立即结束主线程,不要让它执行return 0;
当子线程的结束时间不确定,则使用pthread_exit。
注意:这种情况会产生新的问题,子线程的资源没有办法回收。
#include <stdio.h> #include <pthread.h> #include <unistd.h> void* run(void* arg) { for(int i=0; ;i++) { printf("子线程:%lu %d\n",pthread_self(),i); sleep(1); } } int main(void) { pthread_t tid; pthread_create(&tid,NULL,run,NULL); for(int i=0; i<3; i++) { printf("我是主线程,我要结束了,倒计时:%d\n",3-i); sleep(1); } exit }标签:return,操作系统,void,exit,结束,pthread,终止,线程 From: https://blog.csdn.net/zzt_is_me/article/details/141572042