管程
为什么要引入管程
1、信号量机制存在的问题:编写程序困难、易出错
2、能不能设计一种机制,让程序员写程序时不需要再关注复杂的PV操作,让写代码更轻松呢?
3、1973年, Brinch Hansen首次在程序设计语言( Pascal)
中引入了“管程”成分。一种高级同步机制
简介
以下这些概念看起来都很官方,很绕口,其实通俗来说,把管程理解成JAVA中的类就行了
管程是一种特殊的软件模块,由这些部分组成:
1、局部于管程的共享数据结构说明;
2、对该数据结构进行操作的一组过程
3、对局部于管程的共享数据设置初始值的语句;
4、管程有一个名字
Tips:“过程”其实就是“函数”
管程的基本特征:
1、局部于管程的数据只能被局部于管程的过程所访问
2、一个进程只有通过调用管程内的过程才能进入管程访问共享数据;
3、每次仅允许一个进程在管程内执行某个内部过程。
拓展1:用管程解决生产者、消费者问题
拓展2:Java中类似于管程的机制
Java中,如果用关键字synchronized
来描述一个函数,那么这个函数同一时间段内只能被一个线程调用