- 1.线程属性函数有哪些
- 2.线程函数介绍
-
- ①pthread_attr_init
- ②pthread_attr_destroy
- ③pthread_attr_setdetachstate
- ④pthread_attr_getdetachstate
- ⑤pthread_attr_getstacksize
- 3.一些线程属性函数的使用
1.线程属性函数有哪些
- 使用命令
man pthread_attr_ + <tab><tab>
查看全部函数
- 线程属性类型
pthread_attr_t
int pthread_attr_init(pthread_attr_t *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_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
2.线程函数介绍
①pthread_attr_init
线程属性类型 pthread_attr_t
int pthread_attr_init(pthread_attr_t *attr);- 功能:初始化线程属性- 参数:attr是指向线程属性对象的指针- 返回值:成功:返回0失败:返回非0
②pthread_attr_destroy
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);- 功能:获取线程的属性- 参数:attr:是指向线程属性对象的指针detachstate:用于存储获取到的线程分离状态属性值。- 返回值:成功:饭返回0失败:返回非0
注意:如果指定的线程属性对象中没有设置分离状态属性值,则 pthread_attr_getdetachstate() 函数将返回错误。
③pthread_attr_setdetachstate
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)- 功能:设置线程的属性- 参数:attr:是指向线程属性对象的指针detachstate:用于指定线程的分离状态, detachstate 可以取下列值之一:1.PTHREAD_CREATE_DETACHED:指示线程是分离的。线程结束后,它的资源将被系统自动回收,而不需要通过 pthread_join() 函数等待线程结束。2.PTHREAD_CREATE_JOINABLE:指示线程是可连接的。线程结束后,它的资源不会自动回收,而需要通过 pthread_join() 函数等待线程结束,并释放它的资源。- 返回值:成功:返回0失败:返回非0
④pthread_attr_getdetachstate
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);- 功能:获取线程的属性- 参数:attr:是指向线程属性对象的指针detachstate:用于存储获取到的线程分离状态属性值。- 返回值:成功:饭返回0失败:返回非0注意:如果指定的线程属性对象中没有设置分离状态属性值,则 pthread_attr_getdetachstate() 函数将返回错误。
⑤pthread_attr_getstacksize
int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);- 功能:获取线程栈的大小- 参数:attr:是指向线程属性对象的指针stacksize:用于储存获取到的线程的栈大小
3.一些线程属性函数的使用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>void * callback(void * agr)
{printf("child thread id: %ld\\n", pthread_self());pthread_exit(NULL);
}int main()
{pthread_attr_t attr;int ret = pthread_attr_init(&attr);ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);pthread_t tid;ret = pthread_create(&tid, &attr, callback, NULL);if (ret != 0){char * errstr = strerror(ret);printf("error: %s\\n", errstr);exit(0);}size_t size;ret = pthread_attr_getstacksize(&attr, &size);if (ret != 0){char * errstr = strerror(ret);printf("error: %s\\n", errstr);exit(0);}printf("tid: %ld, stack size: %ld\\n", tid, size);pthread_attr_destroy(&attr);pthread_exit(NULL);return 0;
}