Linux _pthread 属性的控制

线程的属性控制

  1. 问题
    某些情况下,子线程创建并运行后,不需要返回到主线程。

    main2.c

    解决方案:
    把该子线程设置为“脱离线程”

  2. 脱离线程的设置
    1) 方式1
    在创建该线程时,设置该线程的属性。 即:
    —————————————————————————-
    /* 定义一个线程属性 attribute */
    pthread_attr_t attr;

     /* 初始化该属性 */
    pthread_attr_init(&attr); 
    
    /* 设置该线程的脱离属性 */
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ----------------------------------------------------------------------------
    
        /* 使用这个属性创建新线程 */
        pthread_create(&thread, &attr, handle, &arg);
    

    2)方式2
    使用pthread_detach函数。
    例如:pthread_detach(thread);

    注意:使用pthread_join对脱离线程无效!

    注意:线程始终依附于所在的进程。
    当进程中的主线程结束时,该进程也就结束了,
    此时,该进程的所有子线程都将被迫结束。
    所以在主线程要么始终不结束,要么用pthread_join,否则主线程结束后将导致所有其他线程都结束。

  3. 其他线程属性的控制(一般都使用默认属性)
    pthread_attr_setschedpolicy 设置线程的调度方式
    pthread_attr_setstacksize 设置线程的栈大小

    main2.c

线程的属性控制

1. 问题
    某些情况下,子线程创建并运行后,不需要返回到主线程。

    main2.c

    解决方案:
    把该子线程设置为“脱离线程”

2. 脱离线程的设置
    1) 方式1
        在创建该线程时,设置该线程的属性。 即:
        ----------------------------------------------------------------------------
        /* 定义一个线程属性 attribute */
        pthread_attr_t  attr;

         /* 初始化该属性 */
        pthread_attr_init(&attr); 

        /* 设置该线程的脱离属性 */
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        ----------------------------------------------------------------------------

            /* 使用这个属性创建新线程 */
            pthread_create(&thread, &attr, handle, &arg);


    2)方式2
        使用pthread_detach函数。
        例如:pthread_detach(thread);

    注意:使用pthread_join对脱离线程无效!

    注意:线程始终依附于所在的进程。
            当进程中的主线程结束时,该进程也就结束了,
            此时,该进程的所有子线程都将被迫结束。
            所以在主线程要么始终不结束,要么用pthread_join,否则主线程结束后将导致所有其他线程都结束。

3. 其他线程属性的控制(一般都使用默认属性)
    pthread_attr_setschedpolicy  设置线程的调度方式
    pthread_attr_setstacksize     设置线程的栈大小
posted @ 2016-04-02 04:29  夜色下的港湾  Views(498)  Comments(0Edit  收藏  举报