Linux C编程--线程操作线程属性解析

本文详细介绍了POSIX线程属性结构及一系列系统函数,包括初始化、销毁线程属性对象,获取和设置线程堆栈大小、地址,获取和设置线程分离状态等。
线程属性结构如下:

                typedef struct
                {
                       int                           detachstate;     线程的分离状态
                       int                          schedpolicy;   线程调度策略
                       struct sched_param      schedparam;   线程的调度参数
                       int                          inheritsched;    线程的继承性
                       int                          scope;          线程的作用域
                       size_t                      guardsize; 线程栈末尾的警戒缓冲区大小
                       int                          stackaddr_set;
                       void *                     stackaddr;      线程栈的位置
                       size_t                      stacksize;       线程栈的大小

                  }pthread_attr_t;
  属性的缺省值如下:

属性

结果
scope
PTHREAD_SCOPE_PROCESS
新线程与进程中的其他线程发生竞争。 
detachstate
PTHREAD_CREATE_JOINABLE
线程退出后,保留完成状态和线程 ID。
stackaddr
NULL
新线程具有系统分配的栈地址。 
stacksize

新线程具有系统定义的栈大小。 
priority

新线程的优先级为 0。 
inheritsched
PTHREAD_EXPLICIT_SCHED
新线程不继承父线程调度优先级。 
schedpolicy
SCHED_OTHER
新线程对同步对象争用使用 Solaris 定义的固定优先级。线程将一直运行,直到被抢占或者直到线程阻塞或停止为止 。 



下面重点介绍对线程属性进行设置的一系列系统函数。
   1、初始化一个线程对象的属性
int pthread_attr_init(pthread_attr_t *attr);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
    说  明:Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。
            pthread_attr_init实现时为属性对象分配了动态内存空间。
    头文件:#include <pthread.h>
[color=space:pre-wrap]
2、销毁一个线程属性对象
int pthread_attr_destroy(pthread_attr_t *attr);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
    说  明:经pthread_attr_destroy去除初始化之后的pthread_attr_t结构被pthread_create函数调用,将会导致其返回错误。
    头文件:#include <pthread.h>
]
] 3、获取线程堆栈大小
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            stacksize  返回线程的堆栈大小
    说  明:获取线程堆栈大小
    头文件:#include <pthread.h>
[color=space:pre-wrap]
4、设置线程堆栈大小
[color=space:pre-wrap] int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            guardsize  线程的栈保护区大小:应该是页大小的整数倍
    说  明:设置线程堆栈大小:
    头文件:#include <pthread.h>
[color=space:pre-wrap]
5、获取线程堆栈地址
int pthread_attr_getstackaddr(pthread_attr_t *attr, void **stackaddr);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            stackaddr  返回获取的栈地址
    说  明:函数已过时,一般用pthread_attr_getstack来代替
    头文件:#include <pthread.h>
[color=space:pre-wrap]
6、设置线程堆栈地址
int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            stackaddr  设置线程堆栈地址
    说  明:函数已过时,一般用pthread_attr_setstack来代替
    头文件:#include <pthread.h>
[color=space:pre-wrap]
7、获取线程分离状态属性
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr          指向一个线程属性的指针
            detachstate   保存返回的分离状态属性
    说  明:获取线程分离状态属性
    头文件:#include <pthread.h>
[color=space:pre-wrap]
8、修改线程分离状态属性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr        指向一个线程属性的指针
            detachstat  有两个取值
                        PTHREAD_CREATE_DETACHED(分离)
                        PTHREAD_CREATE_JOINABLE(非分离)
    说  明:Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。
    头文件:#include <pthread.h>
[color=space:pre-wrap]
9、获取线程的作用域
int pthread_attr_getscope(pthread_attr_t *attr, int *scope);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            scope      返回线程的作用域
    说  明:指定了作用域也就指定了线程与谁竞争资源
    头文件:#include <pthread.h>
[color=space:pre-wrap]
10、设置线程的作用域
int pthread_attr_setscope(pthread_attr_t *attr, int scope);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            guardsize  线程的作用域,可以取如下值
                       PTHREAD_SCOPE_SYSTEM    与系统中所有进程中线程竞争
                       PTHREAD_SCOPE_PROCESS   与当前进程中的其他线程竞争
    说  明:指定了作用域也就指定了线程与谁竞争资源
    头文件:#include <pthread.h>
[color=space:pre-wrap]
11、获取线程是否继承调度属性
int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr          指向一个线程属性的指针
            inheritsched  返回继承调度属性的设置
    说  明:获取线程是否继承调度属性
    头文件:#include <pthread.h>
[color=space:pre-wrap]
12、设置线程是否继承调度属性
int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            guardsize  设置线程是否继承调度属性
                        PTHREAD_INHERIT_SCHED:调度属性将继承于正创建的线程
                                               attr中的设置将被忽略
                        PTHREAD_EXPLICIT_SCHED 调度属性将被设置为attr中指定的属性值
    说  明:  盛世游戏:http://www.shengshiyouxi.com
    头文件:#include <pthread.h>
[color=space:pre-wrap]
13、获取线程的调度策略
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            policy     返回线程的调度策略
    说  明:获取线程的调度策略
    头文件:#include <pthread.h>
[color=space:pre-wrap]
14、设置线程的调度策略
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
    返回值:若是成功返回0,否则返回错误的编号
    形  参:
            attr       指向一个线程属性的指针
            policy     线程的调度策略,有如下三种:
                        SCHED_FIFO    先入先出策略

 

                                                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值