美文网首页
管程概念

管程概念

作者: Easy的幸福 | 来源:发表于2019-10-16 10:33 被阅读0次
    什么是管程

    Java采用的是管程技术,synchronized关键字及wait()、notify()、notifyAll()这三个方法都是管程的组成部分。管程和信号量是等价的,所谓等价指的是用管程能够实现信号量,也能用信号量实现管程。

    管程,对应的英文是Monitor,很多Java领域的同学都喜欢将其翻译成“监视器”,这样是不是就瞬间明白了什么是管程。所谓管程,指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。

    并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。这两大问题,管程都是能够解决的。


    image

    很像java里面的一个对象,synchronize其实在编译原理,就是一个monitor指令。

    下面是一个同步的实例:

    public class BlockedQueue<T>{
      final Lock lock =
        new ReentrantLock();
      // 条件变量:队列不满  
      final Condition notFull =
        lock.newCondition();
      // 条件变量:队列不空  
      final Condition notEmpty =
        lock.newCondition();
    
      // 入队
      void enq(T x) {
        lock.lock();
        try {
          while (队列已满){
            // 等待队列不满 
            notFull.await();
          }  
          // 省略入队操作...
          //入队后,通知可出队
          notEmpty.signal();
        }finally {
          lock.unlock();
        }
      }
      // 出队
      void deq(){
        lock.lock();
        try {
          while (队列已空){
            // 等待队列不空
            notEmpty.await();
          }
          // 省略出队操作...
          //出队后,通知可入队
          notFull.signal();
        }finally {
          lock.unlock();
        }  
      }
    }
    

    这个示例很经典,有很多变形,可以参考这篇文章

    相关文章

      网友评论

          本文标题:管程概念

          本文链接:https://www.haomeiwen.com/subject/qjyymctx.html