【问题标题】:reader writer problem in operating system操作系统读写器问题
【发布时间】:2018-11-16 08:12:04
【问题描述】:

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

如果不是,这是操作系统中存在的代码-Galvin 如何处理上述情况

作家的流程:

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

【问题讨论】:

  • 又一个人被这本书弄糊涂了。通常可以有多个读取器和一个写入器。这取决于对象的锁定方式。写入器可以取出排他锁并阻止读取器,也可以取出写入锁并允许读取器。

标签: operating-system


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

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

  • 现在只有新读者才能访问该资源。

  • 同样,当最后一个阅读器退出临界区时,它
    使用 rw 互斥信号量向作者发出信号,因为有
    现在零读者,作家可以有机会访问
    资源。

【讨论】:

  • 希望对您有所帮助..!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2011-10-14
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多