posix线程中的线程属性pthread_attr_t 属性主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create函数中第二个参数设置为NULL的时候,将采用默认属性设置;
线程属性如下:
typedef struct
{
int detachstate; 线程的分离状态
int schedpolicy; 线程调度策略
struct sched_param schedparam; 线程的调度参数
int inheritsched; 线程的继承性
int scope; 线程的作用域
size_t guardsize; 线程栈末尾的警戒缓冲区大小
int stackaddr_set;
void * stackaddr; 线程栈的位置
size_t stacksize; 线程栈的大小
}pthread_attr_t;
线程的分离状态:表示新的线程是否与同一个进程中的其他线程脱离同步,如果设置为PTHREAD_CREATE_DETACHED,则新线程不能调用用pthread_join来同步,且在退出时自动释放所占用的资源;
默认的状态是PTHREAD_CREATE_JOINABLE
一旦设置了PTHREAD_CREATE_DETACHED,线程的状态就回不去了。
线程的分离状态决定线程终止的时候以什么样的方式终止自己。默认状态是非分离状态,这种状态下,原有的线程等待创建的线程结束,创建的线程调用了pthread_join返回后才算终止了自己的状态,占用的线程资源也会释放。分离线程没有被其他线程所等待,自己运行结束了,也就终止了,线程资源也会自动释放。
通过以下函数设置和获取线程的分离状态:
#include <pthread.h>
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);