4.2.4 管程

2025-05-31 15:30:48 更新

(一)出现背景

若用信号量和P、V操作来解决进程的同步与互斥问题,需要在程序中的适当位置安排P、V操作,否则会造成死锁错误。

为了解决分散编程带来的困难,1974年和1975年汉森(Briush Hansen)和霍尔(Hoare)提出了另一种同步机制管程。

(二)管程思路

采用资源集中管理的方法,将资源用某种数据结构抽象地表示出来。

由于临界区是访问共享资源的代码段,因而建立一个管程来管理进程提出的访问请求。

采用这种方式对共享资源的管理可以借助数据结构及在其上实施操作的若干过程来进行,对共享资源的申请和释放可以通过过程在数据结构上的操作来实现。

(三)管程(monitor)

定义:由一些共享数据、一组能为并发进程所执行的作用在共享数据上的操作的集合、初始代码以及存取权组成。

管程提供了一种允许多进程安全、有效地共享抽象数据类型的机制,

管程实现同步机制由“条件结构(condition constnict) ”所提供,

为实现进程互斥同步,必须定义一些只能被wait和signal操作所访问的条件变量,如var notempty、notfull: condition,。

1)notfull.wait操作意味着调用该操作的进程将被挂起,使另一个进程执行;

2)notfull.signal操作仅仅是启动一个被挂起的进程,

3)如无挂起进程,notfull.signal操作相当于空操作,不改变notfull状态,这不同于V操作。