条件临界区域conditionalcriticalregion条件临界区域.PDFVIP

条件临界区域conditionalcriticalregion条件临界区域.PDF

  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文档。上传文档
查看更多
条件临界区域conditionalcriticalregion条件临界区域

条件临界区域(conditional critical region ) 条件临界区域(CCR, Brinch Hansen )几乎与管程同时提出,特征: • 一种有特定语法结构的临界区,封装一个受保护变量 • 线程只能在针对特定受保护变量的region 语句里访问该变量 • 访问同一受保护变量的region 语句属于同一CCR,其执行互斥 • 每个CCR 有一个布尔条件,任何到达相应region 语句的线程都必须等 到该条件为真且当时无其他线程在针对同一保护变量的region 语句里 • CCR 可以嵌套,这时也要关心死锁问题(与管程的情况类似) CCR 的概念 • 出现在并发语言Edison 里 • 对Ada 95 和Java/C# 等语言的同步机制设计有很大影响 这几种语言的并行机制实际上是管程和CCR 的组合,不同语言采用的 方式有一些不同 2012年5月 52 条件临界区域 基于条件临界区域(CCR )的有界缓 冲区实现。region 语句可以有布尔条 件,因此可以避免显式的条件变量 CCR 避免了signal 的语义问题:这里 用布尔条件而不是条件变量,且只能 在CCR 开始等条件 采用CCR 的描述相对最简单清晰。 但这种结构实际上明显低效: 常见实现中退出CCR 的代码都立 即唤醒所有等待线程,让它们在各 自的环境里检查自己的条件 最坏情况:每当有线程退出CCR, 就需要对所有等待线程做上下文的 切入切出,开销很大 2012年5月 53 Ada 95 的同步 Ada 83 的主要同步机制基于消息传递,Ada 95 增加了受保护对象 受保护对象可以有三类子程序成员:函数、过程和入口 • 函数只能读对象数据,过程和入口可读可写。每个受保护对象有一个 读者写者锁,保证所有可能冲突的操作互斥 • 过程或入口用于获得对受保护对象的排他性访问,多个函数可以并发 执行,但不能和过程或入口同时执行 • 入口可带布尔卫,调用线程需要等卫成立(像CCR 的布尔表达式) 三类特殊调用:限时调用,等待特定时长后作废;条件调用,不能立即执 行就转去执行一段替代代码;异步调用,立即执行一段替代代码,如果替 代代码结束前该调用可执行,就作废替代代码改执行调用 入口卫不在调用线程的上下文中求值,因此比CCR 条件高效。所有卫都 在受保护对象的定义里,可在目标代码中成组检测 不能在入口执行中等待条件,但可调用另一入口而入队,效果相同 2012年5月 54 Java 的同步 多线程共享的对象有一个互斥锁,通过synchronized 语句获取 (同步) 引用同一对象的所有同步语句在执行上互斥,引用不同对象的同步语句可同 时执行。成员函数可为synchronized,相当于方法体用synchronized(this) 语 句包围,对这种方法的调用将互斥 调用共享对象的非同步方法,或对其public 数据成员的访问都不互斥,它们 可以并发执行,也可以和synchronized 语句或方法并发进行 线程通过调用预定义无参方法wait 将自己挂起。虚拟机不能判断线程在给 定对象上挂起的原因,这使线程可能由于并不合适的原因而被唤醒,因此通 常必须把wait 嵌在一个条件检测循环里 对对象执行wait 方法将释放该对象的锁。在嵌套 的同步语句或同步方法里执行wait 时,不释放线 程掌握的任何其他对象的锁 2012年5月 55

文档评论(0)

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

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

1亿VIP精品文档

相关文档