一、线程属性
     可以使用pthread_attr_t结构修改线程默认属性,并这些属性和创建的线程练习起来,可以使用pthread_att_init函数初始化pthread_attr_t结构,调用pthread_attr_init后,pthread_attr_t结构所包含的就是操作系统实现支持的所有线程属性的默认值。
     pthread_attr_destroy用于销毁属性对象,释放资源。
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr)
int pthread_attr_destroy(pthread_attr_t *attr)

     线程属性有四个:

     1.detachstate 线程的分离状态属性
     2.guardsize 线程栈末尾的警戒缓冲区大小(字节数)
     3.stackaddr 线程栈的最低地址
     4.stacksize 线程栈的最小长度
 
     如果在创建线程时就知道不需要了解线程的终止状态,可以修改pthread_attr_t结构中的detachstate属性,让线程一开始就处于分离状态。可以使用pthread_attr_setdetachstate把线程属性detachstate设置为以下两个合法值之一:PTHREAD_CREATE_DETACHED,PTHREAD_CREATE_JOINABLE.
#include <pthread.h>
int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr, int *detachstate);
int pthread_attr_setdetachstate(const pthread_attr_t *attr, int *detachstate);

例子:

#include "apue.h"
#include <pthread.h>
 
int makethread(void *(*fn)(void *), void *arg)
{
    int err;
    pthread_t tid;
    pthread_attr_t attr;
 
    err = pthread_attr_init(&attr);
 
    if (err != 0)
    {
        return err;
    }
 
    err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 
    if (err == 0)
    {
        err = pthread_create(&tid, &attr, fn, arg);
    }
 
    pthread_attr_destroy(&attr);
    return err;
}
View Code

相关文章: