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_ + 查看全部函数
  • 线程属性类型 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 
#include 
#include 
#include 
#include 
#include 

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

你可能感兴趣的:(jvm,c++,linux,服务器)