- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关键段线程同步技术研究与实现①.pdf
科技资讯 2016 NO.33
SCIENCE TECHNOLOGY INFORMATION
信 息 技 术
DOI:10.16661/j.cnki.1672-3791.2016.33.006
关键段线程同步技术研究与实现①
1 1 1 2
王金峰 陈新房 潘志安 曲喆
(1.防灾科技学院灾害信息工程系;2.防灾科技学院审计监察处 河北三河 065201)
摘 要:文章阐述了多线程需要同步的原因,比较了用户模式下的线程同步和内核对象下的线程同步两种同步机制的优缺点,详
细阐述了用户模式下的关键段同步技术、工作原理以及关键段同步的特点,在windows平台下实现了使用关键段技术作为同步的
代码。
关键词:关键段 多线程同步 windows代码
中图分类号:G642 文献标识码:A 文章编号:1672-3791(2016)11(c)-0006-02
假如所有的线程都能够独自运行并且不需要相互通信的时 EnterCriticalSection会更新变量,以表示调用线程被获准访问的
候,Linux、Unix、windows、Mac OS等等操作系统都能进入最 次数。如果成员变量表示其他线程已经获准访问资源,那么
佳运行状态,但是很少有线程能够总是独自运行。首先创建线程 EnterCriticalSection会使用一个事件内核对象把当前线程切换
是为了执行具体任务,当任务完成以后,要通知到别的一个线程 到等待状态。关键段的核心价值在于它能够以原子的方式执行所
或者进程;其次系统资源包括堆、串口、文件、窗口以及无数其他 有这些测试。
资源,多个进程或线程访问共享的资源,不能破坏资源的完整性, 2.3 关键段线程同步的特点
从这两方面说起,就需要引入线程同步技术。 关键代码段最大的优点就是在用户模式执行线程同步,不需要
进入内核模式,从而减少了进入内核模式所用的时间;关键段不是
1 线程同步两种模式 内核对象,所以只能用来同一进程内线程间的同步,不能用来多个
线程的同步技术主要包括两个方面的内容:用户模式下的线 不同进程间的线程的同步,因此要比其他内核对象的速度要快[4]。
程同步、内核对象下的线程同步。用户模式下的线程同步主要包
括以下几种方式:volatile类型限定符、原子访问,关键段,Slim读 3 Windows平台关键段的实现
写锁等等,其中最常用是关键段技术。内核对象下的线程同步:主 const int dwdwCount = 100;
要包括等待函数、事件内核对象、信号量互斥对象、互斥量内核对 int g_nSum = 0;
[1]
象等等 。 CRITICAL_SECTION g_cs;//CRITICAL_SECTION
用户模式下的线程同步不涉及CPU模式切换,因此执行速度 struct
较快,但是仅限于单个进程间的线程同步。内核对象下的线程同 DWORD WINAPI OneThread(PVOID pvParam){
步会涉及到CPU模式切换,消
文档评论(0)