您的位置:首页 > 运维架构 > Linux

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

2013-07-11 18:17 190 查看
线程属性结构如下:

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

0

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

priority

0

新线程的优先级为 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 先入先出策略
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++