【问题标题】:About Readers/writers synchronization关于读写器同步
【发布时间】:2012-07-23 16:18:18
【问题描述】:

我正在研究读取器/写入器同步实现,我有一个问题。

这是我正在查看的代码:

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);
}

这是阅读器代码,我的问题是,为什么等待(阅读器)在互斥区域之外完成。出于同样的原因,为什么邮政(作家)也不在外面做?

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

谁能告诉我区别?

提前致谢。

【问题讨论】:

  • 请正确缩进你的代码,给我们关于你的操作系统的提示,也给我们你的全局函数和变量的声明。

标签: c synchronization mutex semaphore


【解决方案1】:

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

Semaphore post 不锁定任何资源,可以在任何上下文中使用(不注意锁定)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多