2012-07-25 49 views
1

我在看读者/作家syncronization的实现,我有一个问题。关于读者/作家同步

这是我在看代码:

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

这段代码来自操作系统课程,所以我很确定它是正确的。

有人能告诉我区别吗?

Thx提前。

+0

英文代码,por优惠! – Shahbaz 2012-07-25 09:53:50

+0

请正确缩进你的代码,给我们一个关于你的操作系统的提示,并且给我们你的全局函数和变量的声明。 – 2012-07-25 16:12:25

回答

0

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

信号灯后不要锁定任何资源,并可能在任何情况下使用(不注意锁定)。