- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程咼效访冋共享资源
BY懒牛
一、 多线程访问共享资源需注意的问题:
1、 多个线程如果在一个进程内,可共享进程内的资源。
2、 多个线程在不同的进程内,不同进程的资源不能直接共享,要用到内存映射文件。
3、 访问方式是用户方式还是内核方式,用户方式速度快,内核方式速度慢。
二、 用户方式和内核方式的区别:
1、 书上说的用户方式有互锁函数, CRITICAL_SECTION 关键代码段,内核方式有信标、
事件、互斥量。但是关键代码段也不是完全的用户方式,当一个线程进入关键代码段访问资源,
另一个线程是进入内核方式等待的。也是很费时间。经过理解, 我认为:用户方式是指当一个线
程占有资源时,另外的线程是以什么方式在等待。
2、 平常让程序等待的方式有三种,一种是让程序不断的条件循环,当条件达到时,退出。
这是最标准的用户方式,依靠循环浪费时间来等待,没用到内核。第二种用 sleep()函数,这个不
太好用条件控制,本质上也是内核方式。第三种就是内核的 Waitfor…..之类的等待函数了。
3、 从浪费时间的程度上来看,要分 CPU是单核还是多核的,如果是单核的,用户方式的
条件循环最浪费时间, 因为单核时循环要不断的在几个线程上下文切换特浪费时间; 内核方式其
次,所以在单核情况下,我们多线程访问资源,就直接用内核方式就 OK 了。在多核方式下情况
有变化,一个线程在第一个 CPU上访问资源时,另一个线程可以使用第二个 CPU来在用户方式
下做条件循环来判断是否能够访问资源了。多核方式下是真正的并发访问,二个线程同时运行, 不用做上下文切换。如果这种访问资源的时间用时很短, 比如说:一个线程只是在资源上做一个
简单运算就离开,则另一个线程在几个用户循环的判断时间就能够访问资源了, 何苦要进入内核
方式呢?所以在对共享资源访问时,我们先在用户方式下做几个循环来判断,如果能访问了, OK进行访问,如果循环到一定时间,还是不能访问资源,说明这种资源的访问很费时间,在用 户方式下继续做循环不合算了,我们就换成内核方式,让系统去帮我等待去吧, 我们不管了,哈
哈!
三、 多线程访问共享资源总结如下:
1、 单核时直接进入内核方式等待,等待成功则访问资源。
2、 多核时先在用户方式下做循环不断的询问是否能访问, 到达一定循环次数,如果条件满
足则访问,如果到循环最大值仍然不能访问,则我们也不浪费时间,直接转内核方式等待。
WINDOWS核心编程中为高效访问共享资源, 编制了 COptex类,使用这个类建立的对象就
是多个线程要访问的共享资源,下面让我们来详细分析一下:
表1-1成员变量描述
成员
描述
m _ l L o c k C o u n t
当线程调用enter()想进入o p t e x的时侯。如果线程进入了,则 此变量加1,同时 m _ l R e c u r s e C o u n t 变量也加1,如果没
有进入,则此变量加1,但是 m _ l R e c u r s e C o u n t 变量不加
1,总之它的意思是线程试图进入的次数,从这个变量可以判断, 还有多少线程还在等待进入。此值为0,说明 optex对象无人拥有,
可以进入。
m _ d w T h re a d I d
指明当前拥有o p t e x的线程的唯一 1 D。如果没有线程拥有 o p t
ex,那么这个值是 0
m _ l R e c u r s e C o u n t
指明线程拥有op t e x的次数。如果o p t e x没有被线程所拥有, 则这个值是0,—个线程能多次进入拥有 optex,但是离开时要注意,
进入了几次,则也要离开几次,即调用几次 en ter(),配对调用
leave()
m _ h e v t
这是个事件内核对象的句柄,只有当一个线程试图在另一个线程拥 有o p t e x 时,想在内核方式下进入该 o p t e x ,才使用这个句
柄。内核对象句柄是与进程相关的句柄,这就是该成员为什么不使
用S H A R E D I N F O 结构的原因
m _ d w S p i n C o u n t
指明试图进入o p t e x的线程在等待事件内核对象之前应该尝试在 用户方式下进入的次数。在单处理器计算机上,这个值总是0,也就 是说,单核方式不用试,直接用内核方式。
m _ h f m
这是文件映象内核对象的句柄,当多进程共享一个 o p t ex 时,
便使用这个句柄。内核对象句柄属于与进程相关的句柄,这就是为
什么该成员不是 S HAR E D I N F O 结构的原因。对于单进程 o p
t e x 来说,这个值总是 N U L L
m _ p s i
这是指向潜在的共享 op t e x 数据成员的
您可能关注的文档
- 各个年级的英语计划电子版本.docx
- 各地高考模拟试题书面表达分类.docx
- 各部门、班主任、教师SDP工作计划表.docx
- 售前顾问工作手册.docx
- 因式分解基础练习题.docx
- 因数和倍数教材分析与导学案.docx
- 因特网宽带路由器的设置图解教程.docx
- 围堰施工专项方案(增加钢板桩围堰)报审版最终版.docx
- 围手术期肠外营养.docx
- 圩塘中心幼儿园个案分析.docx
- 专题06 经济体制(我国的社会主义市场经济体制)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题11 世界多极化与经济全球化-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 专题03 经济发展与社会进步-5年(2020-2024)高考1年模拟政治真题分类汇编(浙江专用)(解析版).docx
- 专题09 文化传承与文化创新-5年(2020-2024)高考1年模拟政治真题分类汇编(北京专用)(原卷版).docx
- 5年(2020-2024)高考政治真题分类汇编专题08 社会进步(我国的个人收入分配与社会保障)(原卷版).docx
- 专题07 探索世界与把握规律-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 5年(2020-2024)高考政治真题分类汇编专题06 经济体制(我国的社会主义市场经济体制)(原卷版).docx
- 专题11 全面依法治国(治国理政的基本方式、法治中国建设、全面推进依法治国的基本要求)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题17 区域联系与区域协调发展-【好题汇编】十年(2015-2024)高考地理真题分类汇编(解析版).docx
- 专题01 中国特色社会主义-5年(2020-2024)高考1年模拟政治真题分类汇编(原卷版).docx
文档评论(0)