加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:线程属性

发布时间:2016-10-12 19:57:58 所属栏目:Unix 来源:网络整理
导读:pthread_attr_t 的缺省属性值 1、初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参:

3、获取线程分离状态属性.

int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);

返回值:若是成功返回0,否则返回错误的编号

形  参: attr          指向一个线程属性的指针

detachstate   保存返回的分离状态属性,有两个取值:

PTHREAD_CREATE_DETACHED(分离)

PTHREAD_CREATE_JOINABLE(非分离)

说  明:获取线程分离状态属性

4、修改线程分离状态属性

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

如果对现有的某个线程的终止状态不感兴趣的话,可以使用pthread_detach函数让操作系统在线程退出时收回它所占有的资源。如果在创建线程之前就知道不需要了解线程的终止状态,则可以修改pthread_attr_t结构中的detachstate线程属性,让线程以分离状态启动。其中pthread_detach函数时在线程创建之后设置分离属性的。

返回值:若是成功返回0,否则返回错误的编号

形  参:attr        指向一个线程属性的指针

detachstat  有两个取值:

PTHREAD_CREATE_DETACHED(分离)

PTHREAD_CREATE_JOINABLE(非分离)

说  明:所有的Pthreads系统都支持detachstate属性,该属性的值可以是PTHREAD_CREATE_DETACHED(分离)或PTHREAD_CREATE_JOINABLE(非分离)。默认的,线程被创建为非分离,即意味着由pthread_create创建的该线程ID能被用来与线程连接并获得它的返回值,或取消它。

5、获取线程的堆栈信息(栈地址和栈大小)

int pthread_attr_getstack(pthread_attr_t *attr, void **stackaddr, size_t *stacksize);

返回值:若是成功返回0,否则返回错误的编号

形  参:attr       指向一个线程属性的指针

stackaddr  返回获取的栈地址

stacksize  返回获取的栈大小

说  明:获取线程的堆栈地址和大小

6、设置线程的堆栈信息(栈地址和栈大小)

int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);

返回值:若是成功返回0,否则返回错误的编号

形  参:attr       指向一个线程属性的指针

stackaddr  线程的堆栈地址(低位地址):应该是可移植的,对齐页边距的可以用posix_memalign来进行获取。如果将 stackaddr 设置为非空值,而不是缺省的 NULL,则系统将在该地址初始化栈,假设大小为 stacksize。

stacksize  线程的堆栈大小:应该是页大小的整数倍

说  明:设置堆栈区,将导致pthread_attr_setguardsize失效。

试用场合:对进程来说,虚拟地址空间的大小是固定的,进程中只有一个栈,所以它的大小通常不是问题。但对线程来说,同样大小的虚拟地址空间必须被所有的线程栈共享。如果应用程序使用了太多的线程,致使线程栈的累计大小超过了可用的虚拟地址空间,这时就需要减少线程默认的栈大小。另一方面,如果线程调用的函数分配了大量的自动变量或者调用的函数涉及很深的栈帧,那么这时需要的栈的大小可能要比默认的大。

注意:stackaddr  线程属性被定义为栈的内存单元的最低地址,但这并不是必然是栈的开始位置。对于某些处理器结构来说,栈是从高地址向低地址方向伸展的,那么stackaddr 线程属性就是栈的结尾而不是开始位置。

7、获取线程堆栈地址

int pthread_attr_getstackaddr(pthread_attr_t *attr, void **stackaddr);

返回值:若是成功返回0,否则返回错误的编号

形  参:attr       指向一个线程属性的指针

stackaddr  返回获取的栈地址

说  明:函数已过时,一般用pthread_attr_getstack来代替

8、设置线程堆栈地址

int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);

返回值:若是成功返回0,否则返回错误的编号

形  参:attr       指向一个线程属性的指针

stackaddr  设置线程堆栈地址

说  明:函数已过时,一般用pthread_attr_setstack来代替。

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读