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
posted @ 2023-06-26 08:54  言叶以上  阅读(41)  评论(0编辑  收藏  举报