1

リーダー/ライターの同期化の実装を検討していますが、質問があります。

これは私が見ているコードです:

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。

4

1 に答える 1

0

いずれにせよ、ロックされたリソースで待機することは悪い考えです。待機中にリソースを解放できる場合は、解放する必要があります (リソースをロックしたい別の人がロックするのを防ぐため)。

セマフォ ポストはリソースをロックせず、任意のコンテキストで使用できます (ロックには注意を払っていません)。

于 2012-07-25T09:49:46.607 に答える