操作系统--管程

简介

在信号量机制中,每个要访问临界资源的进程都必须自备同步的PV操作,大量分散的同步操作会给系统管理带来麻烦,且容易因为同步操作不当而导致系统死锁。于是便产生了一种新的进程同步工具——管程(Monitors)

  • 管程(Monitors):是一个资源管理模块,其中包含了共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程(方法)所组成的资源管理程序


基本特征

  • 局部与管程的数据只能被局部于管程的过程所访问

  • 一个进程只有通过调用管城内的过程才能进入管程访问共享数据

  • 每次仅允许一个进程在管程内执行某个内部过程


实际应用

生产者-消费者问题

image-20220804230157650

引入管程的目的无非就是更方便的实现进程互斥和同步

  1. 需要在管程中定义共享数据(如生产者消费者问题的缓冲区)

  2. 需要在管程中定义用于访问这些共享数据的入口--就是一些函数(如生产者消费者问题中,可以定义一个函数用于将产品放入缓冲区,在定义一个函数用于从缓冲区取出产品)

  3. 只有通过这些特定的入口才能访问共享数据

  4. 管程中有很多入口,但是每次只能开放其中一个入口,并且只能让一个进程或线程进入(如生产者消费者问题中各进程需要互斥的访问共享缓冲区。管程的这种特性即可保证一个时间段内最多只会有一个进程在访问缓冲区。注意这种互斥特性是由编译器负责实现的,程序员无需关心

  5. 可在管程中设置条件变量及等待/唤醒操作已解决同步问题。可以让一个进程或线程在条件变量上等待(此时,该进程应先释放管程的使用权,也就是让出入口);可以通过唤醒操作将等待在条件变量上的进程或线程唤醒

程序员可以用某种特殊语法定义一个管程(如 monitor ProducerConsumer ……end monitor),之后其它程序员就可以使用这个管程提供的特定入口很方便的使用实现进程同步/互斥

Java中类似管程机制

image-20220804231154253

posted @ 2022-08-04 23:14  伊文小哥  阅读(329)  评论(0)    收藏  举报