管程的作用
在信号量机制中,每个要访问临界资源的进程都必须自备同步的PV操作,大量分散的同步操作给系统管理带来了麻烦,且容易因同步操作不当而导致系统死锁,于是便产生了一种新的进程同步工具一一管程
管程的特性保证了进程互斥,无须程序员自己实现互斥,从而降低了死锁发生的可能性,同时管程提供了条件变量,可以让程序员灵活地实现进程同步
管程的定义和基本特征
管程的定义
管程是一种高级的同步机制,本质上也是用于实现进程的互斥和同步
利用共享数据结构抽象地表示系统中的共享资源,而把对该数据结构实施的操作定义为一组过程(“过程”就是“函数”)。进程对共享资源的申请、释放等操作,都通过这组过程来实现,这组过程还可以根据资源情况,或接受或阻塞进程的访问,确保每次仅有一个进程使用共享资源,这样就可以统一管理对共享资源的所有访问,实现进程互斥。这个代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,称为管程(monitor)
管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据
由上述定义可知,管程由4部分组成
①管程的名称
②局部于管程内部的共享数据结构说明
③对该数据结构进行操作的一组过程(或函数)
④对局部于管程内部的共享数据设置初始值的语句
管程的基本特征
-
局部于管程的数据只能被局部于管程的过程所访问
-
一个进程只有通过调用管程内的过程才能进入管程访问共享数据
(各外部进程/线程只能通过管程提供的特定“入口”才能访问共享数据) -
每次仅允许一个进程在管程内执行某个内部过程
【计算机操作系统】 专栏的文章 均有参考 《王道计算机考研 操作系统》 课程视频