为了解决信号量机制存在的问题:编写程序困难、易出错。
1973年,Brinch Hansen首次在程序设计语言(Pascal)中引入了“管程”成分:一种高级同步机制。
1.局部于管程的共享数据结构说明;
2.对该数据结构进行操作的一组过程;
3.对局部于管程的共享数据设置初始值的语句;
4.管程有一个名字。
1.局部于管程的数据只能被局部于管程的过程所访问;
2.一个进程只有通过调用管程内的过程才能进入管程访问共享数据;
3.每次仅允许一个进程在管程内执行某个内部过程。


引入管程的目的无非就是要更方便地实现进程互斥和同步。
程序员可以用某种特殊的语法定义一个管程(比如: monitor ProducerConsumer …end monitor;)
之后其他程序员就可以使用这个管程提供的特定“入口”很方便地使用实现进程同步/互斥了。(封装思想 )
Java中,如果用关键字synchronized来描述一个函数,
那么这个函数同一时间段内只能被一个线程调用。

每次只能有一个线程进入inert函数,如果多个线程同时调用insert 函数,则后来者需要排队等待。