Skip to content

管程:高级同步机制与并发控制

Published:  at  11:39 PM

管程(Monitor)

引入背景

在基于信号量(Semaphore)的同步机制中,程序员需要显式地编写 P / V 操作来实现进程互斥与同步。这种方式存在以下问题:

因此,人们提出了一种更高级的同步机制,用于在语言或系统层面封装同步细节,这就是管程。


管程的定义

管程是一种特殊的软件模块,用于管理共享资源,并保证对共享资源访问的互斥性和同步性。

从逻辑结构上看,管程将共享数据及其操作统一封装,对外仅暴露安全的访问接口。


管程的组成

一个完整的管程通常包含以下部分:

  1. 局部于管程的共享数据结构

    • 类似于模块的私有变量
    • 只能被管程内部访问,外部进程无法直接操作
  2. 对共享数据进行操作的一组过程(方法)

    • 定义访问共享数据的唯一入口
    • 负责实现具体的业务逻辑
  3. 对共享数据的初始化语句

    • 用于设置共享数据的初始状态
  4. 管程的名称

    • 用于标识该同步模块

管程的基本特征

  1. 封装性

    • 共享数据只能通过管程内部定义的过程进行访问
    • 外部进程无法直接读写共享数据
  2. 互斥性

    • 任一时刻,只允许一个进程进入管程执行内部过程
    • 多个进程对共享数据的访问天然互斥
  3. 受控进入

    • 进程只能通过调用管程中的方法进入管程
    • 不存在绕过管程直接访问共享数据的情况

管程示意

在管程模型中:


管程与进程同步

为了支持更复杂的同步需求,管程通常还会配合以下机制使用:

通过条件变量,可以在管程内部实现进程之间的同步,而不仅仅是互斥访问。

典型应用场景包括:


管程的设计思想


小结


Suggest Changes

Previous Post
死锁概念及处理策略详解
Next Post
抽烟者与供应者问题的同步互斥分析