关于读者/作者同步

时间:2012-07-25 09:05:42

标签: c synchronization mutex semaphore

我正在查看读者/作者同步实现,我有一个问题。

这是我正在看的代码:

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(作家)也不在外面完成?

此代码来自操作系统课程,因此我非常确定它是正确的。

有人可以告诉我区别吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

无论如何,等待锁定资源是个坏主意。如果资源可以在等待时释放,那么它应该被释放(以防止锁定另一个喜欢锁定资源的人)。

信号量帖子不会锁定任何资源,可以在任何上下文中使用(不注意锁定)。