这是我 4 天后的考试,我刚刚和我的讲师交谈,他对这部分讲座非常不清楚,我和很多学生一起努力理解这一点。
基本上,如果您想使用信号量实现 Hoare 监视器,所涉及的步骤顺序是什么?
] 3
更新:
我现在开始明白了
所以第一张幻灯片是用于访问监视器的进程
如果你是唯一的,那么你调用 wait(mutex)
进入显示器做你的事情然后离开
如果有东西等待进入监视器,那么你就启动下一个信号量,即等待进入信号量的进程队列。否则,如果您是监视器中唯一的人,那么您退出并向上互斥体,以便其他人可以进入互斥体
对于带有等待(条件)和信号(条件)的第二张幻灯片
when u wait(c): c_count++ //等待此条件的进程数,加一 if(next_count>0) up(next) //如果希望进入监视器的等待进程数大于零, up(next),解除阻塞等待进程之一
else up(mutex) //如果你是唯一一个然后 up mutex 所以其他人进入 down(c_sem) //阻止你自己睡觉 c_count-- //你醒来所以等待这个条件的进程数量减少
对于信号(c)部分:
if(c_count>0) // 如果等待这个条件的进程数大于 0
next_counter++ //想要进入监视器的进程数增加一(c_sem);// 取消阻塞等待此条件的进程之一 down(next) //如果有可用位置,则关闭此位置,否则获取阻塞并加入等待进程的列表 next_count--; //你醒来并尝试进入显示器