• 线程的销毁 分离属性


    线程结束,缺少pthread_join 的话,资源并不会真正释放,设置线程 分离属性 ,则可不需要join 都可以释放资源。

    实例:

    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <pthread.h>
    pthread_t pid_new_job;  
    CourseInfo NextCourseInfo;

    #define ID_SIZE 48+1 

    struct CourseInfo{
        
        char ID[ID_SIZE];
        int Last_Percent;
        CourseInfo()
        {
            memset(ID,0,sizeof(ID));      
            Last_Percent = 0;
        }
    };

    void *thread_handleSpace(void *args)
    {
        printf("\n======= thread_handleSpace Begin =======\n");
        CourseInfo *pCI = (CourseInfo*)args;
        printf("\n======= thread_handleSpace End =======\n");
        pthread_exit(NULL);
    }

    int main(void)
    {
           strcpy(NextCourseInfo.ID ,"121");
        pthread_attr_t attr;
            
        int res ;
        res = pthread_attr_init(&attr);//属性
        if(res != 0)
        {
            printf("exit 1");
            return -1;
        }
        
        res = pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);//建立线程的争用范围(PTHREAD_SCOPE_SYSTEM 或 PTHREAD_SCOPE_PROCESS)。 使用 PTHREAD_SCOPE_SYSTEM 时,此线程将与系统中的所有线程进行竞争。使用 PTHREAD_SCOPE_PROCESS 时,此线程将与进程中的其他线程进行竞争
        res += pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        if(res != 0)
        {
            printf("exit 2");
            return -1;
        }
        
        res = pthread_create(&pid_new_job, NULL, thread_handleSpace, (void *) &NextCourseInfo);//全局的NextCourseInfo,为了防止销毁了该变量(此前在这的sleep 可以不用)
           //    pthread_join(pid_new_job,NULL);//无需此句了。
        pthread_attr_destroy(&attr);
        return 0;
    }

    测试:用文字界面登录你的linux , 在调用前中后 用free 命令 打印前后的内存对比吧。可以在线程中吃掉more memory, 以更明显的看出结果。

     
    dengwei@dengwei-laptop:/media/dengwei/blog$ free
                 total       used       free     shared    buffers     cached
    Mem:        984680     847920     136760          0      53784     351384
    -/+ buffers/cache:     442752     541928
    Swap:      1354744          0    1354744
    dengwei@dengwei-laptop:/media/dengwei/blog$ ./CI &
    .... 

    dengwei@dengwei-laptop:/media/dengwei/blog$ free

                 total       used       free     shared    buffers     cached
    Mem:        984680     848536     136144          0      53800     351436
    -/+ buffers/cache:     443300     541380
    Swap:      1354744          0    1354744
    [1]+  Done                    ./CI
    dengwei@dengwei-laptop:/media/dengwei/blog$ free
                 total       used       free     shared    buffers     cached
    Mem:        984680     848612     136068          0      53808     351468
    -/+ buffers/cache:     443336     541344

    Swap:      1354744          0    1354744 

    for more about attribute of thread: 

    http://blog.sina.com.cn/s/blog_693301190100vvlf.html 

  • 相关阅读:
    在虚拟机安装Oracle EF步骤
    ORACLE数据库入门级及操作杂记
    软技能-代码之外的生存指南读后感
    RabbitMQ 使用demo
    RabbitMQ 应用学习随笔
    mysql 发生死锁时,解决方法
    GBase存过--工作实战
    Oracle存储过程--工作实战
    浅谈Oracle、MySQL和Gbase的使用体验(一)
    seajs学习笔记
  • 原文地址:https://www.cnblogs.com/no7dw/p/2364109.html
Copyright © 2020-2023  润新知