Montior监视器对象与操作系统的管程(monitors)

什么是管程?

管程保证了同一时刻只有一个进程/线程在管程内对共享变量进行操作,其封装了一套对共享资源访问的模型。其作用是保证多进程或者多线程访问同一个资源时,能够达到“互斥”、“同步”的效果。
在这里插入图片描述
管程的内部如上图所示。
使用过程如下:

  1. 同步队列的线程去获取管程中共享变量的执行权,如果成功则执行对共享变量的处理。如果失败则返回同步队列。
  2. 对于成功获取到管程执行权的进行对共享变量的处理操作,执行完毕后可以唤醒同步队列的线程,重新竞争锁。也可以进行wait,将线程添加到等待队列中。当其他线程进行notify唤醒操作的时候,等待队列的线程移动到同步队列,重新竞争锁。

管程的实现

管程的实现,其实就是JAVA是通过sychronyzed关键字,和wait()、notify、notifyAll() 方法实现了整个管程模型。执行方式如下
在这里插入图片描述

总结

  1. java中synchronized关键字完整实现了管程的模型,因为synchronized锁的是对象,而wait()、notify()、notifyall()是对象的父类Object类中的方法。
  2. 管程在java的内部实现其实是一个monitor监视器,而monitor监视器中的字段(owner、recursions、waitSet、EntryList)就是实现管程的数据结构,只不是monitor将其封装在ObjectMonitor中。
  3. monitor实现的是最简单的,只有一个等待队列。而管程其实可以 设计多个等待队列。

参考

锁原理-管程
java里的管程
Monitor的实现原理

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值