如何为读写器系统编写关键部分?

时间:2010-05-20 06:46:28

标签: readerwriterlock

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

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

  1. RR
  2. 湿重
  3. R-瓦特
  4. R-WW
  5. RR-W
  6. RR-WW
  7. 其中
    [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-瓦特

    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); }
      
    7. 对于多个阅读器系统,共享变量访问不需要是原子的。

      对于多个编写器系统,共享变量访问需要是原子的,因此用'm'锁定。

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

      此致
      Srinivas Nayak

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

您可以找到有关其用法的几个教程,例如: here