リーダー/ライターの同期化の実装を検討していますが、質問があります。
これは私が見ているコードです:
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);
}
これはリーダー コードです。私の質問は、相互排除領域の外で待機 (リーダー) が行われるのはなぜですか。そして、同じ理由で、ポスト(ライター)も外で行われないのはなぜですか?
このコードは運用システムのコースからのものなので、正しいと確信しています。
誰かが私に違いを教えてもらえますか?
事前にThx。