5·1互斥和临界区-Read.pptVIP

  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文档。上传文档
查看更多
5·1互斥和临界区-Read.ppt

5·1 互斥和临界区 互斥 (mutual exclusion)保证了共享资源的进程不同时使用同一个资源。 访问共享资源的程序或代码称为临界区 (critical region),只有这里需要禁止并发, 称为并发控制 ,这些控制机制通过使进程停止和轮流访问资源的方式来确保互斥。 三点测试 第一点:解决方案能保证两个进程不同时进入它们的临界区吗? 第二点:解决方案能防止不试图进入它们临界区的进程产生的干扰吗? 第三点:解决方案能防止饥饿吗?(饥饿是由进程永久地等待进人临界区造成的,也称为无限等待。) 5.2信号量 信号量是一个整型变量,它的值说明了受保护资源的状态。信号量只允许两个操作:raise和lower。当进程希望进入代码的临界区时,它必须执行lower,离开时则必须执行raise。raise和lower检查信号量的值,并分别加l或是减l。信号量检查和改变是作为原子操作完成的,也就是说,该操作是不可分的,并且不可间断。 信号量算法 Let Semaphore SEM; //初始化值是0 SEM=my_favorite_shared_device; LOWER SEM=SEM-1; If SEM=0 Return (true); Else {Wait(until_raise); Return(true);} RAISE SEM=SEM+l;//如果不只一个进程等待,系统选择哪一个进程接受日RAISE USINGS SEMPHORE Bla Bla Bla; //执行非临界区代码 Lower(SEM); //等待真值返回 Critical_region_code; //访问共享资源 Raise(SEM); Bla Bla Bla; //执行非临界区代码 信号量应用举例 假设进程A、B、C、D和E希望访问受信号量SEM保护的共享资源。跟踪SEM的值: 0·SEM=O; //初始化值 l·SEM=-1; //进程B执行lower,进入临界区 2·SEM=-2; //进程A执行lower,等待raise 3·SEM=-3; //进程C执行lower,等待raise 4·SEM=-2; //进程B执行raise,离开临界区 5. //系统选择raise进程C,进程C进入临界区 6·SEM=-1; //进程C执行raise,离开临界区 7. //raise进程A,进入临界区 8·SEM=-2;//进程D执行lower,等待raise 9·SEM=-1;//进程A执行raise,离开临界区 l0·//raise进程D,进入占界区 l1·SEM=0;//进程D执行raise,离开临界区 12·SEM=-l;//进程E执行lower,进入临界区 13·SEM=0;//进程E执行raise,离开临界区 5·2·1信号量的缺点 信号量的缺点包括它对程序员的依赖。信号量依靠程序员执行Lower进入临界区并执行raise退出临界区。然而如果程序员意外地使用另一个lower离开临界区,这将会发生什么?信号量仍然处于被保护状态,没有进程能够获得raise,与这些资源相关的系统则被死锁! 如果进程有一个不适时的(即执行lower后但在执行raise操作前)崩溃,也会发生类似的死锁。 5.2.2信号量评估 首先,信号量能保证两个进程不同时进入它们的临界区吗?能。 其次,信号量能防止不试图进入它们临界区的进程产生的干扰吗?适当利用的情况下能。只有那些已经表示希望进入临界区的进程才使用信号量,如果信号量使用不当(如5·2·1节所指出的那样),不再想进入临界区的进程就会阻碍等待进入临界区的进程。 最后,信号量能防止饥饿吗?能。适当使用下,信号量本质上不具有导致永久延迟的请求。然而,正如我们所讨论的那样,不适当的使用会导致死锁。 总之,适当使用信号量能够通过三点测试。最后应注意,信号量在真正的分布式环境中很难实现,并应尽量避免,因为必须保持信号量数据的绝对一致性。 UNIX信号量支持 UNIX系统V支持信号量作为进程间通信设施的一部分。在C或C++编程中使用信号量,必须应用如下的包含语句: #include sys/sem.h 创建信号量的函数调用是semget,而semget执行各种信号量操作。所有细节的完全列表在本地系统 (输入man semget,或man semop)的手册 (在线UNIX手册)中都有提供。另外,UNIX系统中对信号量的硬件支持能通过关键字索引选项 (输入man –k semaphore)找到。 5.

文档评论(0)

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

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

1亿VIP精品文档

相关文档