管程(Moniter): 并发编程的基本心法( 二 )

MESA 模型

在管程的发展史上 , 先后出现过三种不同的管程模型 , 分别是:Hasen 模型、Hoare 模型和 MESA模型 。 其中 , 现在广泛应用的是 MESA 模型 , 并且 Java 管程的实现参考的也是 MESA模型 。 所以今天我们重点介绍一下MESA 模型 。

在并发领域 , 有两个核心问题:一个是互斥 , 一个是同步 。 管程就是来解决这两个问题的 。

  • 互斥:同一时刻只允许一个线程访问共享资源 。

  • 同步:线程之间如何通信、协作 。

管程互斥与同步实现

它的思路很简单 , 将共享变量以及对共享变量的操作统一封装起来 。 如下图所示 , 管程 A 将共享变量 data 和相关的操作入队enq、出队deq 封装起来 。 线程 A 和线程 B想访问共享变量 data , 只能通过调用管程提供的 

推荐阅读