Linux多线程07-线程属性
线程属性类型: pthread_attr_t
描述:
pthread_attr_setdetachstate() 函数
将由 attr 引用的线程属性对象的分离状态属性设置为 detachstate 中指定的值。分离状态属性确定使用线程属性对象 attr 创建的线程将在可连接状态还是分离状态下创建。
可以在 detachstate 中指定以下值:
PTHREAD_CREATE_DETACHED 使用 attr 创建的线程将以分离状态创建。
PTHREAD_CREATE_JOINABLE 使用 attr 创建的线程将以可连接状态创建。
新初始化的线程属性对象中分离状态属性的默认设置为 PTHREAD_CREATE_JOINABLE。
pthread_attr_getdetachstate() 函数将 attr 中的线程属性对象的分离状态属性返回到由 detachstate 指向的缓冲区中。
pthread_attr_getdetachstate函数
用于获取线程属性对象的分离状态(detach state),即获取线程是以可分离状态(detached)还是以连接状态(joinable)运行的。
int pthread_attr_init(pthread_attr_t *attr);
功能: 初始化线程属性变量
参数: attr 线程属性
int pthread_attr_destroy(pthread_attr_t *attr);
功能: 释放线程资源
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int
*detachstate);
功能: 获取线程分离状态属性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
功能: 设置线程分离状态属性
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
Compile and link with -pthread.
代码实例
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void* callback(void* arg){
printf("child thread id: %ld\n",pthread_self());
return NULL;
}
int main(){
//创建一个线程属性变量
pthread_attr_t attr;
//初始化属性变量
pthread_attr_init(&attr);
//设置分离状态属性
int detachstate = PTHREAD_CREATE_DETACHED;
pthread_attr_setdetachstate(&attr, detachstate);
//获取分离状态属性
pthread_attr_getdetachstate(&attr,&detachstate);
if(detachstate == PTHREAD_CREATE_DETACHED){
printf("datachstate: PTHREAD_CREATE_DETACHED\n");
}
pthread_t tid;
//使用我们自己设置好的属性创建子线程
int ret = pthread_create(&tid, &attr, callback, NULL);
if(ret!=0){
char* errstr = strerror(ret);
printf("error_create: %s\n",errstr);
}
//输出主线程和子线程ID
printf("tid: %ld, main thread id: %ld\n",tid,pthread_self());
//获取线程栈大小
size_t size;
pthread_attr_getstacksize(&attr, &size);
printf("thread stack size: %ld\n", size); //8388608
//释放线程属性资源
pthread_attr_destroy(&attr);
pthread_exit(NULL);
return 0;
}
运行结果
thread stack size: 8388608
datachstate: PTHREAD_CREATE_DETACHED
tid: 139739962758912, main thread id: 139739971147584
child thread id: 139739962758912