• 多线程,线程的退出顺序


     

     1:主进程退出时,不管子、孙...线程都会退出。但是对子线程创建的线程来说,比如下面的的子线程创建了孙线程,子线程先退出,孙线程没有退出

    #include <pthread.h>
    #include <stdio.h>
    
    void* fun(void* v)
    {
        sleep(10);
        printf("grandson thread exit
    ");
    }
    
    
    void* thrd_start_routine(void* v)
    {
        pthread_t thd;
        pthread_create(&thd, NULL, &fun, NULL);
        sleep(5);
        printf("created thread exit
    ");
    }
    
    int main()
    {
            pthread_t thrdid;
                    
            pthread_create(&thrdid, NULL, &thrd_start_routine, NULL);
            
            sleep(15);
            printf("main thread exit
    ");
            return  0;
    }


    输出是
    //过了5秒
    created thread exit
    //又过了5秒
    grandson thread exit
    //又过了5秒
    main thread exit

     

    2:如果主线程调用了pthread_exit,那么它退出了,子线程也不会退出

    #include <pthread.h>
    #include <stdio.h>
    
    void* thrd_start_routine(void* v)
    {
         sleep(10);
            printf("created thread
    ");
    }
    
    int main()
    {
            pthread_t thrdid;
                    
            pthread_create(&thrdid, NULL, &thrd_start_routine, NULL);
            
            sleep(5);
            printf("main thread
    ");
            pthread_exit(NULL);
            return  0;
    }

    //过了5秒
    main thread
    //又过了5秒
    created thread

  • 相关阅读:
    关于在Websphere下程序找不到jar包内.properties文件的问题
    MysqL的root用户不允许远程连接
    ajax提交表单数据到controller
    js表单验证
    jq删除标签中的元素
    点击超链接触发js事件
    spring的特点
    mysql每个jar包的作用
    抽象工厂举例
    简单的省市联动
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6515433.html
Copyright © 2020-2023  润新知