临界区互斥信号量.pdfVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

(转)临界区,互斥量,信号量,的区别(线程同步)收藏

四种进程或线程同步互斥的控制方法

1、临界区:通过对多线程的串行化来公共资源或一段代码,速度快,适合控制数据。

2、互斥量:为协调共同对一个共享资源的单独而设计的。

3、信号量:为控制一个具有有限数量用户资源而设计。

4、:用来通知线程有一些已发生,从而启动后继任务的开始。

临界区(CriticalSection)

保证在某一时刻只有一个线程能数据的简便办法。在任意时刻只允许一个线程对共享资

源进行。如果有多个线程试图同时临界区,那么在有一个线程进入后其他所有试

图此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,

其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

临界区包含两个操作原语:

EnterCriticalSection()进入临界区

LeaveCriticalSection()离开临界区

EnterCriticalSection()语句执行后代码将进入临界区以后无论发生什么,必须确保与之匹配

的LeaveCriticalSection()都能够被执行到。否则临界区保护的共享资源将不会被释放。

虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程

中的线程。

MFC提供了很多功能完备的类,我用MFC实现了临界区。MFC为临界区提供有一个

CCriticalSection类,使用该类进行线程同步处理是非常简单的。只需程函数中用

CCriticalSection类成员函数Lock()和UnLock()标定出被保护代码片段即可。Lock()

后代码用到的资源自动被视为临界区内的资源被保护。UnLock后别的线程才能这些

资源。

互斥量(Mutex)

互斥量跟临界区很相似,只有拥有互斥对象的线程才具有资源的权限,由于互斥对象只

有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所。当前占据资

源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以资源。

互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安

全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

互斥量包含的几个操作原语:

CreateMutex()创建一个互斥量

OpenMutex()打开一个互斥量

ReleaseMutex()释放互斥量

WaitForMultipleObjects()等待互斥量对象

同样MFC为互斥量提供有一个CMutex类。使用CMutex类实现互斥量操作非常简单,但

是要特别注意对CMutex的构造函数的调用

CMutex(BOOLbInitiallyOwn=FALSE,LPCTSTRlpszName=NULL,

LPSECURITY_ATTRIBUTESlpsaAttribute=NULL)

不用的参数

文档评论(0)

lflebooks + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档