终止线程
方法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
}
2449

被折叠的 条评论
为什么被折叠?



