第10章 线程同步工具包.PDFVIP

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

下载 第1 0章 线程同步工具包 多年来,我对线程的同步问题进行了许多开发工作,编写了一些 C + +类和组件。本章将介 绍这些内容。希望这些代码有用,能够使你节省许多编程时间。 本章首先要介绍如何实现关键代码段和将各种特性添加给它的方法。尤其是,要学习如何 在多个进程中使用关键代码段。然后要学习如何将数据类型包装在 C + +类中,使对象成为对线 程安全的对象。使用这些类,将展示一种其行为特性与信标相反的对象。 接着要介绍如何解决一个常见的编程问题,即当多个线程读取一种资源但是只有一个线程 写入资源时如何进行编程。Wi n d o w s没有预先内置能够容易地实现这种类型的同步的特性,因 此我编写了一个C + +类以便实现这个特性。 最后要介绍如何实现Wa i t F o r M u l t i p l e E x p r e s s i o n s 函数,该函数可以用来创建复杂的表达式, 以便指明应该何时唤醒线程(它的作用很像Wa i t F o r M u l t i p l e O b j e c t s 函数,该函数可以用来等待 任何单个对象变成已通知状态,或者使所有对象处于已通知状态)。 10.1 实现关键代码段:O p t e x 关键代码段始终对我有着巨大的吸引力。但是,如果它们只是用户方式对象,为什么不能 自己来实现它们呢?为什么需要操作系统的支持特性才能使关键代码段运行呢?另外,如果编 写自己的关键代码段,可能需要将各种特性添加给它,并用某种方法来增强它的性能。至少想 要让它跟踪目前究竟哪个线程拥有该资源。如果有一个关键代码段能够实现这些操作,就能帮 助解决代码中的死锁问题;可以使用一个调试程序来发现哪个线程没有释放该资源。 在进一步的说明之前,让我们来看一看究竟如何来实现关键代码段。我反复说,关键代码 段属于用户方式对象。实际上,这种说法并不是百分之百的正确。如果一个线程试图进入另一 个线程拥有的关键代码段,那么该线程就会被置于等待状态。如果要使它进入等待状态,唯一 的办法是从用户方式转入内核方式。用户方式线程通过循环运行,就能够停止执行有用的操作, 但是这不是个有效的等待方式,因此应该避免使用它。 关键代码段必须包含某个内核对象,以便使线程进入有效的等待状态。关键代码段的运行 速度很快,因为只有当争用该关键代码段的时候,才使用该内核对象。只要线程能够立即获得 对资源的访问权,并且使用该资源,然后释放该资源,而不与其他线程争用该资源,那么就不 使用该内核对象,而且该线程决不会退出用户方式。在大多数应用程序中,两个线程很少会同 时争用关键代码段。 O p t e x . h和O p t e x . c p p文件(见后面清单 1 0 - 1)说明了关键代码段的实现方法。这里称关键代 码段是一个O p t e x (这是optimized 互斥对象(优化互斥对象)的缩略词),并将它作为一个C + +类 来实现。一旦理解了这个代码,就会懂得关键代码段的运行速度为什么比互斥对象内核对象快。 由于实现了关键代码段,因此可以将有用的特性添加给它。例如,C O p t e x类使得不同进程 中的线程能够实现同步。这是个令人叫绝的附加特性,这样就得到了一个高速运行的机制,使 得不同进程中的线程之间能够互相进行通信。 若要使用o p t e x ,只需要声明一个C O p t e x对象。该对象有3个构造函数: 第 1 0章 线程同步工具包计计229 下载 第一个构造函数用于创建只能用来对单个进程中的各个线程进行同步的 C O p t e x对象。这种 类型的o p t e x 占用的开销比跨进程的o p t e x要少得多。另外两个构造函数可以用来创建在多个进 程中的线程之间实现同步的 o p t e x 。对于p s z N a m e 参数,必须传递一个A N S I或U n i c o d e 字符串, 该字符串用于对每个共享的 o p t e x进行标识。若要使两个或多个进程共享一个 o p t e x ,那么两个 进程必须建立一个C O p t e x对象的实例,并且传递相同的字符串名字。 如果线程要进入和退出C O p t e x对象,请调用E n t e

文档评论(0)

专业好文档 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6110200002000000

1亿VIP精品文档

相关文档