操做系统:管程理解

最近开始看操做系统的书(自己不是这个方向的),单看书本管程仍是不能彻底理解,如今简单总结一下吧。编程

1.管程 (英语:Monitors,也称为监视器) 是一种程序结构,结构内的多个子程序(对象或模块)造成的多个工做线程互斥访问共享资源。这些共享资源通常是硬件设备或一群变数。管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。与那些经过修改数据结构实现互斥访问的并发程序设计相比,管程实现很大程度上简化了程序设计系统中的各类硬件资源和软件资源,都可用数据结构抽象地描述其资源特性,即用少许信息和对资源所执行的操做来表征该资源,而忽略了它们的内部结构和实现细节。利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操做定义为一组过程。数据结构

像一个中介站,程序利用共享资源要经过这个的子程序(操做具体共享资源的一个过程,已经将具体硬件软件资源抽象成一种数据结构,对这个过程进行操做至关于使用资源),最多一个线程执行保证互斥。并发

2.管程的条件变量:条件变量是在管程内部的数据结构,且只有在管程内才能被访问,它对管程内全部过程是全局的,只能经过wait(),signal()两个操做访问。编程语言

wait():挂起调用进程并释放管程,直至另外一进程在条件变量上执行signal()。
signal():若是有其余进程因对条件变量执行wait()而被挂起,便释放之,若是没有进程等待,则信号被忽略,不保存。
wait和signal是利用资源的内部语句,条件变量至关于要用的资源,若是已经被别的调用,就wait改变量,用好了别的资源会signal,而后这个程序再利用
3.管程有一个很重要的特性,即任一时刻管程中只能有一个活跃进程,这一特性使管程能有效地完成互斥。管程是编程语言的组成部分,编译器知道它们的特殊性,所以能够采用与其余过程调用不一样的方法来处理对管程的调用。典型的处理方法是,当一个进程调用管程过程时,该过程当中的前几条指令将检查在管程中是否有其余的活跃进程。若是有,调用进程将被挂起,直到另外一个进程离开管程将其唤醒。若是没有活跃进程在使用管程,则该调用进程能够进入。
4. 从语言的角度看,管程主要有如下特性:
  (1)模块化。管程是一个基本程序单位,能够单独编译; 
  (2)抽象数据类型。管程是中不只有数据,并且有对数据的操做; 
  (3)信息掩蔽。管程外能够调用管程内部定义的一些函数,但函数的具体实现外部不可见; 
5.简单点说就是只能被单个线程执行的代码了,举个例子假如一个管程类叫atm(取款机),里面有两个方法叫提款 取款,不一样的人为不一样的线程,可是atm只容许一我的在一个时间段中进行操做,也就是单线程,那么这个atm就须要一个锁,单一我的在使用时,其余的人只能wait。再者一我的若是使用的时间太长也不行,因此须要一个条件变量来约束他。条件变量可让一个线程等待时让另外一线程进入管程,这样能够有效防止死锁
6.由于调用wait原语后,使进程等待的缘由有多种,为了区别它们,引入了条件变量,就是为了排不一样wait的队列(等待缘由不一样)
相关文章
相关标签/搜索