- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
jjuunneeccaauuzzhhaanngg的的专专栏栏
44 种种进进程程或或线线程程同同步步互互斥斥的的控控制制方方法法
分类: 基 工程库 2013-01-12 23:39 104人阅读 评论 (0) 收藏 举报
44 种种进进程程或或线线程程同同步步互互斥斥的的控控制制方方法法 [转贴 2006-1-6 13:17:37]
字号:大 中中 小
前言:摘自 《Windows 内核实验》
1.2.4 windows2000/xp 线程同步
windows2000/xp提供了互斥量 (mutex)、信号量 (semaphore)和事件 (event)等三种同步对象和相应的系统调用,用于
线程的互斥与同步。从本质上讲,这组同步对象的功能是相同的,他们的区别在于适用场合和效率会有所不同。
互斥量主要用于共享资源的互斥访问,在一个时刻只能被一个线程使用。他的相关API包括CreateMutex OpenMutex
ReleaseMutex。CreateMutex创建一个互斥对象,返回对象句柄;OpenMutex打开并返回一个已存在的互斥对象句柄,用于后
续访问;而ReleaseMutex释放对互斥对象的占用,使之成为可用。
信号量对象初始值的取值范围在0到最大值之间,用于限制并发访问的线程数。它的相关api包括:Createsemaphore
OpenSemaphore、ReleaseSemphore。Createsemaphore创建一个信号量对象,在输入参数中指定最大值和初值,返回对象句
柄;OpenSemaphore返回一个已存在的信号量对象的句柄,用于后续访问;ReleaseSemphore释放对信号量对象的占用。
事件对象相当于触发器,可用于通知一个或多个线程某事件的出现。它的相关API包括CreateEvent OpenEvent SetEvent
ResetEvent和PulseEvent。CreateEvent创建一个事件对象,返回对象句柄;OpenEvent 返回一个已存在的事件对象的句
柄,用于后续访问。SetEvent 和PulseEvent设置制定事件对象为可用状态;ResetEvent设置指定事件对象为不可用状态。
除了上述三种同步对象,windows2000/xp还提供了一些能与进程同步相关的机制。如临界区对象和互锁变量访问API等。临
界区 (critical section)对象只能用于在同一进程内使用的临界区,同一进程内各线程对他的访问是互斥进行的。把变量
说明为CRITIACAL_SECTION类型,就可作为临界区使用。相关的API包括
InitializeCriticalSection、EnterCriticalSection、TryEnterCriticalSection、LeaveCriticalSection和
DeleteCriticalSection。initiallizeCriticalSection对临界区对象进行初始化;EnterCriticalSection等待占用临界区
的使用权,得到使用权时返回;TryEnterCriticalSection非等待方式申请临界区的使用权,申请失败时,返回
0。LeaveCriticalSection释放临界区的使用权;DeleteCriticalSection释放与临界区对象相关的所有系统资源。
互锁变量访问API用于对整型变量的操作,可避免线程间切换对操作连续性的影响。这组互锁变量访问API包括
InterlockedExchange、interlockedCompareExchange InterlockedExchangeAdd、InterlockedDecrement
Interlockedincrement。InterlockedExchange进行32位数据的限度后写原子操作;interlockedCompareExchange 依据比较
结果进行赋值的原子操作;进行限价后村结果的原子操作;InterlockedDecrement 进行先减1后村结果的原子操作;
Interlockedincrement进行先加1后村结果的原子操作。
上面提到的各个API函数的细节请查阅MSDN的相关文档。
**********************************************************
Windows平台下的多线程编程
■ 安徽省民航局
原创力文档


文档评论(0)