ImageVerifierCode 换一换
格式:PPT , 页数:29 ,大小:873KB ,
资源ID:1422489      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1422489.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(多线程编程2.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

多线程编程2.ppt

1、多线程编程,基本概念线程:进程中的某一个处理流程一个进程可以有多个线程,进程是线程的父进程所有线程与父进程共享资源,多线程编程,线程分类内核态线程由内核调度程序直接调度,充分发挥多处理器的优势目前linux系统标准线程库采用内核线程方式实现多线程用户态线程一个进程包含多个线程,这些线程从内核调度角度来看只是一个进程,内核把它当一个进程来调度。线程之间调度在用户态进行用户态线程优点是调度效率高(不需要内核参与调度),缺点是对于多核处理器利用率不高,一个线程阻塞会导致整个线程组阻塞,多线程编程,创建线程#includeint pthread_create(pthread_t*id,pthread_

2、attr_t*attr,void*pFun,void*args)id:返回线程IDattr:线程属性pFun:线程调用的函数args:线程函数的参数,多线程编程,退出线程方式1:线程指定函数执行完毕2:进程退出3:线程调用exec函数4:线程调用 pthread_exit 函数退出5:线程调用 pthread_cancel 终止pthread_exit(void*pRet)pRet指定线程退出返回值,多线程编程,线程管理int pthread_join(pthread_t id,void*pRet)使主进程等待线程完成后才退出pRet 获得 pthread_exit 函数调用的返回值,多线程编

3、程,线程管理pthread_self()线程函数里,获取本线程的线程IDpthread_getattr_np(pthread_t id,pthread_attr_t*attr)获取线程属性,多线程编程,线程属性,调用 init 函数初始化线程属性pthread_attr_init(pthread_attr_t*attr)struct pthread_attr_t int _detachstate;int _schedpolicy;struct sched_param _schedparam;int _inheritsched;int _scope;size_t _guardsize;int _

4、stackaddr_set;void*_stackaddr;unsigned long int _stacksize;,多线程编程,线程属性_detachstate:线程分离状态PTHREAD_CREATE_JOINABLE 可与其他线程连接PTHREAD_CREATE_DETACHED设置/获取线程分离状态int pthread_attr_setdetachstate(pthread_attr_t*attr,int detachstate)int pthread_attr_getdetachstate(pthread_attr_t*attr,int*pdetachstate),多线程编程,线

5、程属性_schedpolicy:线程调度策略SCHED_OTHER 系统默认(分时调度),各个优先级任务时间轮换SCHED_FIFO 实时调度,先到先服务(独占)SCHED_RR 实时调度,时间片轮转(高优先级轮换)设置/获取线程调度策略int pthread_attr_setschedpolicy(pthread_attr_t*attr,int policy)int pthread_attr_getschedpolicy(pthread_attr_t*attr,int*pPolicy),多线程编程,线程属性_schedparam 线程优先级信息_schedparam.sched_priori

6、ty设置获取线程属性参数int pthread_attr_setschedparam(pthread_attr_t*attr,struct sched_param*param)int pthread_attr_getschedparam(pthread_attr_t*attr,struct sched_param*param)对于 SCHED_FIFO SCHED_RR 调度,设置优先级param.sched_priority,多线程编程,线程属性_inheritsched 线程继承性PTHREAD_INHERIT_SCHED 从父进程继承调度属性PTHREAD_EXPLICIT_SCHED

7、不从父进程继承调度属性设置/获取线程继承性int pthread_attr_setinheritsched(pthread_attr_t*attr,int inheritsched)int pthread_attr_getinheritsched(pthread_attr_t*attr,int*pinheritsched),多线程编程,线程属性_scope 线程作用域PTHREAD_SCOPE_SYSTEM 系统所有进程间调度PTHREAD_SCOPE_PROCESS 当前进程间调度设置/获取线程作用域int pthread_attr_setscope(pthread_attr_t*attr,

8、int scope)int pthread_attr_getscope(pthread_attr_t*attr,int*pscope),多线程编程,线程属性_stackaddr 线程堆栈地址_stacksize 线程堆栈大小获取/设置线程桟int pthread_attr_setstackaddr(pthread_attr_t*attr,void*stackaddr)int pthread_attr_getstackaddr(pthread_attr_t*attr,void*stackaddr)int pthread_attr_setstacksize(pthread_attr_t*attr,

9、size_t*stacksize)int pthread_attr_setstacksize(pthread_attr_t*attr,size_t*stacksize),多线程编程,线程属性_guardsize 警戒缓冲区大小线程桟末尾防止桟溢出的扩展内存大小设置/获取线程警戒缓冲区int pthread_attr_getguardsize(pthread_attr_t*attr,size_t*guardsize)int pthread_attr_setguardsize(pthread_attr_t*attr,size_t*guardsize),多线程编程,线程属性pthread_attr_

10、destroy(pthread_attr_t*attr)无效化线程属性无效化后,使用attr 创建线程会失败,多线程编程,多线程编程,线程互斥多线程共享进程资源,访问共享资源时候,需要进行互斥操作确保数据的有效性,多线程编程,互斥锁类型mutex 锁类型 PTHREAD_MUTEX_XXXNORMAL:普通锁,不提供死锁检测,可能出现死锁ERRORCHECK:检错锁,同一线程对已锁的互斥锁加锁会返回错误RECURSIVE:嵌套锁,允许同一线程多次锁定而不产生死锁,多次释放才能被别的线程锁定DEFAULT:默认为普通锁,排队获取锁,多线程编程,锁类型设置/获取int pthread_mutexa

11、ttr_settype(pthread_mutexattr_t*attr,int type);int pthread_mutexattr_gettype(pthread_mutexattr_t*attr,int*type);,多线程编程,线程互斥创建互斥锁pthread_mutex_init(pthread_mutex_t*mutex,pthread_mutexattr_t*attr)互斥锁加锁pthread_mutex_lock(pthread_mutex_t*mutex)互斥锁解锁pthread_mutex_unlock(pthread_mutex_t*mutex),多线程编程,线程互斥p

12、thread_mutex_*函数族 man 无显示解决办法$sudo apt-get install manpages-posix-dev,多线程编程,创建互斥锁pthread_mutex_init(pthread_mutex_t*mutex,pthread_mutexattr_t*attr)attr=NULL 初始化的线程锁 mutex等价于 mutex=PTHREAD_MUTEX_INITIALIZER,多线程编程,互斥锁加锁pthread_mutex_lock(pthread_mutex_t*mutex)对互斥锁加锁同一线程内对已经加锁的互斥锁,进行再次加锁,会造成死锁,多线程编程,互斥锁加锁pthread_mutex_trylock(pthread_mutex_t*mutex)试图锁住互斥体,不阻塞1:互斥体未上锁,锁定并返回成功2:互斥体已经上锁,不阻塞直接返回失败3:锁类型为嵌套锁 RECURSIVE,已上锁,则锁计数器自加,多线程编程,互斥锁解锁pthread_mutex_unlock(pthread_mutex_t*mutex)释放互斥锁对未锁定的互斥锁,进行释放操作,会产生不确定的行为尝试解除有其他线程创建的互斥锁,会产生不确定的行为,多线程编程,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1