- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、管程的概念(10) 一、管程的概念(11) * 主要内容: 一、管程的概念 二、管程的实现 三、管程的应用 3.4 管程 一、管程的概念(1) 管程在功能上和信号量及PV操作类似,属于一种进程同步互斥工具,但是具有与信号量及PV操作不同的属性。 1.为什么要引入管程 信号量机制的缺点:进程自备同步操作,P(S)和V(S)操作大量分散在各个进程中,不易管理,易发生死锁。 1974年和1977年,Hore和Hansen提出了管程。 管程特点:管程封装了同步操作,对进程隐蔽了同步细节,简化了同步功能的调用界面。用户编写并发程序如同编写顺序(串行)程序。 一、管程的概念(2) 引入管程机制的目的: ?把分散在各进程中的临界区集中起来进行管理; ?防止进程有意或无意的违法同步操作; ?便于用高级语言来书写程序,也便于程序正确性验证。 一、管程的概念 (3) 2. 管程的定义 管程是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块。 3.管程的三个组成部分 1)局部于管程的共享变量; 2)对数据结构进行操作的一组过程; 3)对局部于管程的数据进行初始化的语句。 一、管程的概念 (4) 4、管程的属性 ?共享性:管程可被系统范围内的进程互斥访问,属于共享资源 ?安全性:管程的局部变量只能由管程的过程访问,不允许进程或其它管程直接访问,管程也不能访问非局部于它的变量。 ?互斥性:多个进程对管程的访问是互斥的。任一时刻,管程中只能有一个活跃进程。 ?封装性:管程内的数据结构是私有的,只能在管程内使用,管程内的过程也只能使用管程内的数据结构。进程通过调用管程的过程使用临界资源。 管程在Java中已实现。 一、管程的概念 (5) 5.管程语法形式 type 管程名=monitor { 局部变量说明; 条件变量说明; 初始化语句; define 管程内定义的、管程外可调用的过程或函数名列表; use 管程外定义的,管程内将调用的过程或函数名列表; 过程名/函数名(形式参数表) { 过程/函数体; } … 过程名/函数名(形式参数表) { 过程/函数体; } } 局部于管程的数据变量 管程的一组过程 一、管程的概念 (6) condition c1 wait(c1) … condition cn wait(cn) Urgent queue signal 局部数据 条件变量 过程/函数1 过程/函数k 出口 初始化代码 入口 管程 等待调用的进程队列 管程等待区域 … 管程的结构 一、管程的概念 (7) 管程结构分析: 1、管程的组成结构 (1)局部数据和条件变量组成管程内的数据结构 (2)过程/函数1~过程/函数k组成管程内的一组过程对管程内的数据结构进行操作 (3)初始化代码对管程内的数据结构进行初始化 2、管程入口处的等待队列 管程是互斥进入的,所以当一个进程试图进入一个巳被占用的管程时它应当在管程的入口处等待,因而在管程的入口处应当有一个进程等待队列,称作入口等待队列。 一、管程的概念 (7) 3、管程内的资源等待队列 管程是用于管理资源的,当进入管程的进程因资源被占用等原因不能继续运行时使其等待,即将等待资源的进程加入资源等待队列,该队列由条件变量维护。 资源等待队列可以由多个,每种资源一个队列。 一、管程的概念 (8) 4、条件变量 条件变量(例如名称为c)是出现在管程内的一种数据结构,且只有在管程中才能被访问,它对管程内的所有过程是全局的,只能通过两个原语操作来控制它。 c.wait( )?调用进程阻塞并移入与条件变量c相关的队列中,并释放管程,直到另一个进程在该条件变量c上执行signal( )唤醒等待进程并将其移出条件变量c队列。 c.signal( )?如果存在其他进程由于对条件变量c执行wait( )而被阻塞,便释放之;如果没有进程在等待,那么,信号被丢弃。 一、管程的概念 (9) 条件变量与P、V操作中信号量的区别? 条件变量是一种信号量,但不是P、V操作中纯粹的计数信号量,没有与条件变量关联的值,不能像信号量那样积累供以后使用,仅仅起到维护等待进程队列的作用。因此在使用条件变量x时,通常需要定义一个与之配套使用的整型变量x-count用于记录条件变量x所维护等待队列中的进程数。 5、管程内的紧急等待队列 当一个进入管程的进程执行等待操作wait时,其它进程应该被允许进入管程; 当一个进入管程的进程执行唤醒操作signal时(如P唤醒Q),管程中便存在两个同时处于活动状态的进程,由于任一时刻,管程中只能有一个活跃进程。所以处理办法为: 1)P等待Q继续,直到Q退出或等待
文档评论(0)