在4天内我有一场考试,我刚刚和我的讲师交谈,他对课程的这一部分非常不清楚,我和许多学生一样很难理解这个问题。
基本上,如果你想使用信号量实现Hoare监视器,涉及哪些步骤?
以下是伪代码 ]3 更新:
我开始明白了
所以第一张幻灯片是用于访问监视器的进程
如果你是唯一的一个人,那么你就调用 wait(mutex)
进入监视器并完成你的工作再离开
如果有人在等待进入监视器,那么你就会唤醒下一个信号量,即等待进程的队列。否则,如果你是唯一的一个在监视器中的人,则退出并唤醒mutex,以便其他人可以进入mutex。
对于带有wait(condition)和signal(condition)的第二张幻灯片:
当你wait(c)时: c_count++ //等待此条件的进程数,增加1 if(next_count>0) up(next) //如果想要进入监视器的等待进程数量大于零,则up(next),解除一个等待进程的阻塞
否则up(mutex) //如果你是唯一的一个人,则up mutex以便其他人进入 down(c_sem) //阻止自己入睡 c_count-- //您醒来后,等待此条件的进程数减少
对于signal(c)部分:
如果(c_count>0) //如果等待此条件的进程数大于0
next_counter++ //想要进入监视器的进程数增加1 up(c_sem); //解除一个等待此条件的进程的阻塞 down(next) //如果有空位,则down此处,否则被阻塞并加入等待进程列表 next_count--; //您醒来并尝试进入监视器
基本上,如果你想使用信号量实现Hoare监视器,涉及哪些步骤?
以下是伪代码 ]3 更新:
我开始明白了
所以第一张幻灯片是用于访问监视器的进程
如果你是唯一的一个人,那么你就调用 wait(mutex)
进入监视器并完成你的工作再离开
如果有人在等待进入监视器,那么你就会唤醒下一个信号量,即等待进程的队列。否则,如果你是唯一的一个在监视器中的人,则退出并唤醒mutex,以便其他人可以进入mutex。
对于带有wait(condition)和signal(condition)的第二张幻灯片:
当你wait(c)时: c_count++ //等待此条件的进程数,增加1 if(next_count>0) up(next) //如果想要进入监视器的等待进程数量大于零,则up(next),解除一个等待进程的阻塞
否则up(mutex) //如果你是唯一的一个人,则up mutex以便其他人进入 down(c_sem) //阻止自己入睡 c_count-- //您醒来后,等待此条件的进程数减少
对于signal(c)部分:
如果(c_count>0) //如果等待此条件的进程数大于0
next_counter++ //想要进入监视器的进程数增加1 up(c_sem); //解除一个等待此条件的进程的阻塞 down(next) //如果有空位,则down此处,否则被阻塞并加入等待进程列表 next_count--; //您醒来并尝试进入监视器