【问题标题】:How to program critical section for reader-writer systems?如何为读写器系统编写关键部分?
【发布时间】:2010-08-19 14:50:07
【问题描述】:

可以说,我有一个读写器系统,其中读写器同时运行。 'a' 和 'b' 是两个共享变量,它们是相互关联的,所以对它们的修改需要原子操作。

读写器系统可以是以下类型:

  1. rr
  2. ww
  3. 读写
  4. r-ww
  5. rr-w
  6. rr-ww

在哪里
[ r : 单读
rr:多个阅读器
w : 单一作者
ww: 多个作者]

现在,我们可以有一个读取器的读取方法和一个写入器的写入方法,如下所示。我已经按照系统类型编写了它们。

  1. rr

    read_method
    { read a; read b; }
    
  2. ww

    write_method
    { lock(m); write a; write b; unlock(m); }
    
  3. r-w

  4. r-ww
  5. rr-w
  6. rr-ww

    read_method
    { lock(m); read a; read b; unlock(m); }
    
    write_method
    { lock(m); write a; write b; unlock(m); }
    

对于多阅读器系统,共享变量访问不需要是原子的。

对于多写入器系统,共享变量访问需要是原子的,所以用'm'锁定。

但是,对于系统类型 3 到 6,我的 read_method 和 write_method 是否正确?我该如何改进?

此致
斯里尼瓦斯纳亚克

【问题讨论】:

  • 这是作业/练习吗? RW 锁有点棘手,但大多数环境都有您应该使用的内置实现。但是,如果您正在做练习,建议您调用图书馆并没有帮助。
  • 这不是作业。大多数书籍要么讨论其中的一种或两种系统类型。我想要一个集合,对于每种系统,我们都可以了解理论上的事物是如何工作的。

标签: readerwriterlock


【解决方案1】:

如果你想使用 Java,你可以试试ReentrantReadWriteLock

您可以找到一些关于其用法的教程,例如here.

【讨论】:

    【解决方案2】:

    如果你想使用 .NET,你可以试试ReaderWriterLockSlim。我相信它可以为您提供所需的确切功能。您还可以阅读他们实现它的方式,以了解如何自己实现此类锁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 2011-05-21
      • 2017-01-25
      • 2010-12-15
      • 2010-11-03
      • 2017-01-15
      相关资源
      最近更新 更多