我在看一个读者/作者同步实现,我有一个问题。
这是我正在查看的代码:
start_reading(){
lock(m);
if (em_escrita || escritores_espera > 0) {
leitores_espera++;
unlock(m);
wait(readers);
lock(m);
}else
nleitores++;
unlock(m);
}
finish_reading(){
lock(m);
nleitores--;
if (nleitores == 0 && escritores_espera > 0){
post(writers);
em_escrita=TRUE;
escritores_espera--;
}
unlock(m);
}
这是读者代码,我的问题是,为什么等待(读者)是在互斥区之外完成的。出于同样的原因,为什么这篇文章(作者)不在外面写呢?
这段代码来自操作系统课程,所以我很确定它是正确的。
有人能告诉我区别吗?
提前付款。
最佳答案
无论如何,使用锁定的资源等待是个坏主意。如果资源可以在等待时释放,则应该释放它(以防止锁定另一个喜欢锁定资源的人)。
信号量post不锁定任何资源,可以在任何上下文中使用(不注意锁定)。