博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象监视器
阅读量:5136 次
发布时间:2019-06-13

本文共 437 字,大约阅读时间需要 1 分钟。

监视器是一种同步结构,它基于互斥锁,允许线程同时互斥(使用锁)和协作,

互斥

当一个线程访问受保护的数据时,如果没有其他线程在等待,线程获取锁并继续执行。当线程完成执行时,它释放锁并退出监视器。

但如果此时另一个线程已经拥有监视器时,它必须在entry-set中等待。当前面的线程执行完毕退出监视器时,新到达的线程必须与在入口集中等待的其他线程竞争。只有一个线程能赢得竞争并拥有锁。

 

协作

当一个线程需要数据在某一个状态下它才能执行,那么另一个线程负责将数据改变到此状态,

常见的如生产者/消费者的问题,当读线程需要缓冲区处于“不空”的状态它才可以从缓冲区中读取任何数据,如果它发现缓冲区为空,则进入wait-set等待。待写线程用数据填充缓冲区,再通知读线程进行读取。这种机制被称为“Wait and Notify”或“Signal and Continue

如下图所示:

转载于:https://www.cnblogs.com/yanze/p/9774388.html

你可能感兴趣的文章
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
距离公式汇总以及Python实现
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
php match_model的简单使用
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
STM32单片机使用注意事项
查看>>
移动开发平台-应用之星app制作教程
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>