LInux多线程编程----线程属性pthread_attr_t

本文深入探讨了POSIX线程属性的各个方面,包括线程属性对象的初始化、获取线程堆栈大小、分离状态、调度范围、继承调度策略、调度策略和优先级等关键属性。通过代码示例详细展示了如何使用pthread库函数获取这些属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、每个POSIX线程有一个相连的属性对象来表示属性。线程属性对象的类型是pthread_attr_t,pthread_attr_t 在文件/usr/include/bits/pthreadtypes.h中定义。

2、代码及运行结果:

/*
 * pthreadAttr.c
 *
 *  Created on: Aug 17, 2013
 *      Author: root
 */
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#include <unistd.h>

void * my_thread(void * arg){
    int retval = 0;
    pthread_attr_t attr;
    struct sched_param param;
    size_t stacksize;
    int detachstate;
    int scope;
    int inherit;
    int policy;

    if(pthread_attr_init(&attr) == 0){
        if(pthread_attr_getstacksize(&attr, &stacksize) == 0){
            printf("StackSize: %d\n", stacksize);
        }
        if(pthread_attr_getdetachstate(&attr, &detachstate) == 0){
            if(detachstate == PTHREAD_CREATE_JOINABLE){
                printf("DetachState:PTHREAD_CREATE_JOINABLE.\n");
            }
            if(detachstate == PTHREAD_CREATE_DETACHED){
                printf("DetachState:PTHREAD_CREATE_DETACHED.\n");
            }
        }
        if(pthread_attr_getscope(&attr, &scope) == 0){
            if(scope == PTHREAD_SCOPE_PROCESS){
                printf("Scope:PTHREAD_SCOPE_PROCESS\n");
            }
            if(scope == PTHREAD_SCOPE_SYSTEM){
                printf("Scope:PTHREAD_SCOPE_SYSTEM\n");
            }
        }
        if(pthread_attr_getinheritsched(&attr, &inherit) == 0){
            if(inherit == PTHREAD_INHERIT_SCHED){
                printf("InheritSched:PHREAD_INHERIT_SCHED\n");
            }
            if(inherit == PTHREAD_EXPLICIT_SCHED){
                printf("InheritSched:PHTREAD_EXPLICIT_SCHED\n");
            }
        }
        if(pthread_attr_getschedpolicy(&attr, &policy) == 0){
            if(policy == SCHED_FIFO){
                printf("schedPolicy:SCHED_FIFO\n");
            }
            if(policy == SCHED_RR){
                printf("SchedPolicy:SCHED_RR\n");
            }
            else{
                printf("SchedPolicy:SCHED_OTHER\n");
            }
        }
        if(pthread_attr_getschedparam(&attr, &param) == 0){
            printf("SchedPriority:%d\n", param.__sched_priority);
        }
        pthread_attr_destroy(&attr);
    }

    pthread_exit(&retval);
}

int main(){
    int count;
    pthread_t thread;
    int *retval;
    if(pthread_create(&thread, NULL, my_thread, (void*)NULL) != 0){
        printf("Count not create thread!\n");
        return -1;
    }
    if(pthread_join(thread, (void **)(&retval)) != 0){
        printf("No thread to join!\n");
        return -2;
    }
    return 0;
}

  运行结果:

  

转载于:https://www.cnblogs.com/wangle1001986/p/3265316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值