2012-07-25 46 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

在任何情況下,等待鎖定資源是一個壞主意。如果資源可以在等待時釋放,那麼它應該被釋放(以防止鎖定另一個喜歡鎖定資源的人)。

信號燈後不要鎖定任何資源,並可能在任何情況下使用(不注意鎖定)。