此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

对象监视器

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

互斥

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

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

 

协作

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

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

如下图所示:

posted @ 2018-10-11 19:00  炎泽  阅读(1721)  评论(0编辑  收藏  举报