> 文章列表 > 3.7、线程属性

3.7、线程属性

3.7、线程属性

3.7、线程属性

  • 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;
}