操作系统终止线程

终止线程

方法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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值