UNIX环境高级编程(十二)线程控制
来源:互联网 发布:如何清除淘宝聊天记录 编辑:程序博客网 时间:2024/05/30 05:42
12.3线程属性
可以使用pthread_attr_t结构修改线程的默认属性,并且把这些属性与创建的线程连接起来。可以使用pthread_attr_init初始化pthread_attr_t结构,调用pthread_attr_init之后,pthread_attr_t结构所包含的内容就是操作系统实现支持的线程所有属性的默认值
#inlcude<pthread.h>int pthread_attr_init(pthread_attr_t *attr)int pthread_attr_destory(pthread_attr_t * attr)//返回0表示成功,否则返回错误编号
如果要去除对pthread_attr_t结构的初始化,可以调用pthread_attr_destory函数,如果pthread_attr_init为属性对象分配了动态内存空间,pthread_attr_destory将会释放该内存空间。除此之外,pthread_attr_destory还会用无效的值初始化属性对象,因此,如果该对象被误用,将会导致pthread_create函数返回错误
此前曾经介绍过分离线程的概念。如果多某一个线程的终止状态不感兴趣的话,可以使用pthread_detach函数让操作系统在线程终止时就收回它所占的资源。
如果在线程创建时就不想了解线程的终止状态,那么可以修改pthread_attr_t结构中的detachstate线程属性让线程以分离状态启动,可以使用pthread_attr_setdetachstate函数把detachstate设置为下面两个合法值之一:设置为PTHREAD_CREATE_DETACHED,以分离状态启动;设置为PTHREAD_CREATE_JOINABLE,正常启动线程
#include<pthread.h>int pthread_attr_getdetachstate(const pthread_attr_t *attr,int *detachstaate);int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate)//若成功返回0
栈属性
#include<pthread.h>int pthread_attr_getstack(const pthread_attr_t *attr,void **stackaddr,void *stacksize)int pthread_attr_setstack(const pthread_attr_t *attr,void *stackaddr,size_t *stacksize)
如果用完了线程栈的虚拟地址空间,可以调用malloc或者mmap分配空间,并用pthread_attr_setstack来改变线程的栈位置,线程栈所占位置范围中可寻址的最低地址可以用stackaddr参数指定
也可应调用pthread_attr_getstacksize和pthread_attr_setstacksize读取和设置线程栈大小stacksize
int pthread_attr_getstacksize(const pthread_attr_t *attr,size_t *stacksize)int pthread_attr_setstacksize(pthread_attr_t attr,size_t stacksize)
更多线程属性
并发度
并发度控制着用户级线程可以映射的内核线程或进程的数目,,如果操作系统的实现在内核级的线程和用户级的线程之间保持
一对一的映射,那么改变并发度并不会有什么效果,因为所有的线程都可能被调度到,但是如果操作系统的实现让用户级线程
到内核级线程或进程之前的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能。
pthread_setconcurrency函数可以用于提示系统,表明希望的并发度。
#inlcude<pthread.h>int pthread_getconcurrency(void)int pthread_setconcurrency(int level)
12.4同步属性
将在UNIX网络编程中介绍
12.6线程私有数据
线程私有数据是存储和查询与某个线程相关的数据的一种机制,需要私有数据的原因:
第一:
有时需要基于线程维护数据
第二:它提供了基于线程的接口适应多线程环境的机制例如:errno,以前的接口将errno定义为进程环境中全局可访问的整数。为了让线程也能够使用那些原本基于进程的系统调用和库例程,errno被设置为线程私有数据,这样一个线程设置了errno,并不会影响进程中其他线程的errno值
12.7取消选项
有两个属性并没有包含在pthread_attr_t结构中,他们是可取消状态和可取消类型。可取消属性可以是PTHREAD_CANCEL_ENABLE和PTHREAD_CANCEL_DISABLE。线程通过调用pthread_setcancelstate修改可取消状态
#inlcude<pthread.h>int pthread_setcancelstate(int state,int *oldstate)
pthread_setcancelstate函数可以把当前可取消状态设置为state,把原来的可取消状态设置为oldstate指向的内存单元中,这两步是原子操作
- UNIX环境高级编程(十二)线程控制
- 《UNIX环境高级编程》十二线程控制读书笔记
- UNIX环境高级编程(第12章 线程控制)
- unix环境高级编程-线程控制(1)
- unix环境高级编程-线程控制(2)
- 《unix高级环境编程》线程控制——线程属性
- 《unix高级环境编程》线程控制——线程属性
- UNIX高级编程-线程控制
- 《UNIX环境高级编程》 第12章 线程控制 【读书笔记】
- 《unix高级环境编程》线程控制——同步属性
- 《unix高级环境编程》线程控制——同步属性
- UNIX环境高级编程-第12章- 线程控制 - 一
- UNIX环境高级编程-第12章- 线程控制 - 二
- UNIX环境高级编程第十二章 线程控制 总结
- 《UNIX环境高级编程》第12章 线程控制
- unix环境 高级编程-线程(1)
- unix环境高级编程-线程(2)
- Unix环境高级编程读书笔记(线程)
- J2EE学习篇之--JDBC详解
- Selenium2+Java环境搭建
- UML视图(四)状态图
- 优化算法——人工蜂群算法(ABC)
- COCOS2DX2.2.3遇到的奇葩问题记录
- UNIX环境高级编程(十二)线程控制
- POJ-1046
- 微信o2o的本地体验——王府井书店6层拍卖会上微信活动体验
- 编程之美---求二进制数中1的个数
- 交叉编译注意事项
- 2 Xcode5(5)
- 【分享】基于Gabor特征提取和人工智能神经网络的人脸检测matlab代码
- IE兼容模式X-UA-Compatible
- 百度之星 1003 Xor Sum