Linux中基于c++多线程编程学习杂记:主线程退出后,子线程无法继续运行问题的解决。

1、在centos中利用vim编辑器编写相应代码段:vim pthread_create.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>

void* callback(void * arg)
{
    for(int i=0;i<5;++i)
        {
            printf("子线程:i=%d\n",i);
        }
    printf("子线程:%ld\n,pthread_self());
    return NULL;
}
int main()
{
    pthread_t tid;  //调用创建线程的函数,创建一个线程ID
    pthread_create(&tid,NULL,callback,NULL);
    for(int i=0;i<5;i++)
        {
            printf("主线程:i=%d\n",i);
        }
    printf("主线程:%ld\n,pthread_self());
    sleep(3); /*进入程序后主线程先执行,因为主线程先抢到了时间碎片。而在子线程还未抢到时间碎片 
                之前,主线程可能就执行完毕并将虚拟地址空间释放,那么子线程所有资源也就被释放 
                了。所以子线程还未来得及执行就已经死了。为了避免这一情况的出现。利用sleep函数 
                让主线程工作完后休眠三秒,此时主线程就放弃了CPU的资源。此时,主线程不再消耗系 
                统资源,因此无论睡多少秒都不影响程序的执行效率。然后子线程有时间去抢到时间碎 
                片,并向下执行,执行完毕后主线程醒了,继续向下执行,退出程序;*/
   //法二:调用线程退出函数,这样在主线程退出后,不会影响其它子线程的正常运行;
           //pthread_exit(NULL);
    return 0;
}

 2、利用gcc命令进行编译:gcc pthread_creat.c -lpthread -o app

                                            ./app

3、运行结果: 

 

注意: ①主线程执行完毕后就后悔释放系统分配给他的虚拟地址空间,此时,子线程也就                  不复存在了。也因为多个子线程共用一块地址空间。

            ②为了保证子线程可以执行,可调用sleep函数让主线程先休眠;

            ③调用线程退出程序可以保证在主程序退出后,其它子程序可以继续运行,                                pthread_exit(NULL);;

            ③程序编译时,需要添加-lpthread,否则会出现函数的定义找不到的问题;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值