对象监视器


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

互斥

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

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

 

协作

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

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

如下图所示:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM