2

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

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

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

其中
[ r : 单
读 rr: 多读
w : 单写
ww: 多写]

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

  1. rr

    read_method
    { read a; read b; }
    
  2. 万维网

    write_method
    { lock(m); write a; write b; unlock(m); }
    
  3. 读写

  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 是否正确?我该如何改进?

此致,
斯里尼瓦斯纳亚克

4

2 回答 2

0

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

于 2010-05-20T06:51:02.970 回答
0

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

您可以找到几个关于其用法的教程,例如这里

于 2010-05-20T06:58:27.360 回答