管程

来源:互联网 发布:广电网络与移动互联网 编辑:程序博客网 时间:2024/04/19 12:35
管程 (英语:Monitors,也称为监视器) 是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享资源。这些共享资源一般是硬件设备或一群变数。
管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。与那些通过修改数据结构实现互斥访问的并发程序设计相比,管程实现很大程度上简化了程序设计
系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。
利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程。
系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。
利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程。
代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,共同构成了一个操作系统的资源管理模块,我们称之为管程。
Hansan为管程所下的定义:“一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据”。
有上述定义可知,管程由四部分组成:
1.管程的名称;
2.局部于管程内部的共享数据结构说明;
3.对该数据结构进行操作的一组过程;
4.对局部于管程内部的共享数据设置初始值的语句。
局部于管程的数据结构,只能被局部于管程的过程所访问,任何管程之外的过程都不能访问它;反之,局部于管程的过程也只能访问管程内的数据结构。由此可见,管程相当于围墙,它把共享变量和对它进行操作的若干个过程围了起来,所有进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管程,从而实现了进程的互斥。
管程的条件变量:条件变量是在管程内部的数据结构,且只有在管程内才能被访问,它对管程内所有过程是全局的,只能通过wait(),signal()两个操作访问。
wait():挂起调用进程并释放管程,直至另一进程在条件变量上执行signal()。
signal():如果有其他进程因对条件变量执行wait()而被挂起,便释放之,如果没有进程等待,则信号被忽略,不保存。
下面给出管程的一般结构:
 struct Monitor{
    管程内部的变量说明:
    condition   条件变量列表;
    define        函数或方法;
    use            函数或方法;
    void           函数名(){ }
    ...
    void           函数名(){ }
    void  init(){
    对管程中的局部变量进行初始化;
    }
};


0 0
原创粉丝点击