学习日期:2024.7.12
内容摘要:管程的定义和基本特征
管程
管程存在的意义 :在上一章节中,我们学习了利用信号量机制解决进程同步互斥问题的方法,信号量机制编写程序较为复杂困难,易出错。为了让程序员写程序时不再需要关注PV操作,让写代码更加轻松,引入了管程成分,一种高级同步机制。
管程的定义和组成:
管程是一种特殊的软件模块,由以下部分组成:
1.局部于管程的共享数据结构说明;
2.对该数据结构进行操作的一组过程;
3.对局部于管程的共享数据设置初始值的语句;
4.管程有一个名字。
管程的基本特征:
1.局部于管程的数据只能被局部于管程的过程(其实就是"函数")所访问;
2.一个进程只有允许通过调用管城内的过程才能进入管程访问共享数据;
3.每次仅允许一个进程在管程内执行某个内部过程。
以上是逻辑代码,管程好比一个类,生产者和消费者都是其中的函数,而互斥使用共享部分数据的功能则由编译器负责。这样,程序员就不需要再考虑PV操作的顺序等等,而是靠编译器和管程解决这些问题。
引入管程的目的就是要更方便的实现进程的同步与互斥。
1.需要在管程中定义共享数据(如生产者消费者问题的缓冲区)
2.需要在管程中定义用于访问这些共享数据的"入口"------其实就是一些函数
3.只有通过这些特定的"入口"才能访问数据
4.管程中可以有很多入口,但每次只能开放其中一个,并且只能让一个进程或线程进入,这种互斥特性是由编译器负责实现的,程序员不用关心。
5.可在管程中设置条件变量及等待/唤醒操作以解决同步问题。可以让一个进程或线程在条件变量上等待(此时,该进程应该先释放管程的使用权,也就是让出"入口");可以通过唤醒操作将等待在条件变量上的进程或线程唤醒。
程序员可以用某种特殊的语法定义一个管程,之后其它程序员就可以使用这个管程提供的特定"入口"很方便的实现进程同步/互斥了。这其实就是"封装"的思想。
感谢您看到这里,如果满意的话麻烦您点个赞支持一下,个人主页还有更多内容分享。
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》