zoukankan      html  css  js  c++  java
  • 管程

    1、管程的提出

      采用PV同步机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程

    2、管程定义

      指关于共享资源的数据及在其上操作的一组过程或共享数据结构及其规定的所有操作

    3、管程的四个组成部分

      名字

      数据结构说明

      对该数据结构进行操作的一组过程/函数

      初始化语句

    4、管程的三个主要的特性

      4. 1、模块化,一个管程是一个基本程序单位,可以单独编译

      4.2、抽象数据类型,管程是一种特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码

      4.3、信息掩蔽,管程是半透明的,管程中的外部过程(函数)实现了某些功能,管程中的外部过程(函数)实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的

    5、管程有如下几个要素:

      5.1、管程中的共享变量在管程外部是不可见的,外部只能通过调用管程中所说明的外部过程(函数)来间接的访问管程中的共享变量

      5.2、为了保证管程共享变量的数据完整性,规定管程互斥进入

      5.3、管程通常是用来管理资源的,因而在管程中应当设有进程等待队列以及相应的等待及唤醒操作

     

      因为管程是互斥进入的,所以当一个进程试图进入一个已被占用的管程时它应当在管程的入口处等待,因而在管程的入口处应当有一个进程等待队列,称作入口等待队列

      如果进程P唤醒Q,则P等待Q继续,如果进程Q在执行又唤醒进程R,则Q等待R继续,...,如此,在管道内部,由于执行唤醒操作,可能会出现多个等待进程,因而还需要有一个进程等待队列,这个等待队列被称为紧急等待队列。它的优先级应当高于入口等待队列的优先级

      由于管程通常是用于管理资源,因而在管程内部,应当存在某种等待机制。当进入管程的进程因资源被占用等原因不能继续运行时使其等待。为此在管程内部可以说明和使用一种特殊类型的变量,称作条件变量。

      wait(c):如果紧急等待队列非空,则唤醒第一个等待者;否则释放管程的互斥权,执行此操作的进程的PCB入c链尾部

      signal(c):如果c链为空,则相当于空操作,执行此操作的进程继续;否则唤醒第一个等待者,执行此操作的进程的PCB入紧急等待队列的尾部

    管程的实现有两个主要途径 1、直接构造(效率高)

                 2、间接构造,即用某种已经实现的同步机制去构造

  • 相关阅读:
    FlashSocke 通过flash进行socket通信(as代码)
    JavaScript 中的对象深度复制(Object Deep Clone)
    map,vector 等容器内容的循环删除问题(C++)
    [转]用JavaScript在浏览器中创建下载文件
    [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)
    [记]Debian alias 设置, 不设置貌似有点不方便习惯
    Linux 安装配置 FTP 服务 (vsftpd)
    FreeSWITCH 安装配置的 各种坑, 填坑
    ubuntu编译安装ruby1.9.3,从p551降级到p484
    redmine3.3.3 rake db:migrate 报错invalid byte sequence in US-ASCII (Argument Error) 解决方法
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3540306.html
Copyright © 2011-2022 走看看