操作系统中的读写器问题

时间:2018-11-16 08:12:04

标签: operating-system

在Reader-writer问题中,如果Writer正在写入某些数据,那么其他Reader可以同时读取数据吗?

如果没有,这是操作系统-加尔文中存在的代码如何处理上述情况

作家的过程:

do {
    wait(rw mutex);
    . . ./* writing is performed */
    signal(rw mutex);
} while (true);

阅读者的过程:

do {
    wait(mutex);
    read count++;
    if (read count == 1)
        wait(rw mutex);
    signal(mutex);
    . . ./* reading is performed */
    wait(mutex);
    read count--;
    if (read count == 0)
        signal(rw mutex);
    signal(mutex);
} while (true);

1 个答案:

答案 0 :(得分:1)

  • 如上面在编写者代码中所见,编写者只是在等待
    rw互斥信号量,直到有机会写入
    资源。
  • 执行写操作后,它会增加w,以便 下一位作者可以访问该资源。
  • 另一方面,在读取器的代码中,锁是 每当进程更新read_count时获取。
  • 当读者想要访问资源时,首先它会增加 read_count值,然后访问资源,然后 减少read_count值。
  • 第一个读取器使用信号量rw互斥量 关键部分和退出关键的最后一个读者 部分。

  • 原因是,当第一批读者进入关键 部分,作者被阻止访问资源。

  • 现在只有新读者可以访问该资源。

  • 类似地,当最后一个读者退出关键部分时,它
    使用rw互斥信号量向写作者发信号,因为有
    现在零读者和作家都有机会访问
    资源。