让我们说,我有一个读写器系统,其中读写器同时运行。 'a'和'b'是两个共享变量,它们彼此相关,因此对它们的修改需要是一个原子操作。
读写器系统可以是以下类型:
其中
[r:单读者
rr:多个读者
w:单一作家
ww:多位作家]
现在,我们可以为读者提供读取方法,为写入者提供写入方法,如下所示。我已经把它们写成了系统类型。
rr
read_method
{ read a; read b; }
ww
write_method
{ lock(m); write a; write b; unlock(m); }
R-瓦特
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是否正确?我该如何改进?
此致
Srinivas Nayak
答案 0 :(得分:0)
如果您想使用.NET,可以试试ReaderWriterLockSlim。我相信它可以为您提供所需的确切功能。您还可以阅读他们实现它的方式,以了解如何自己实现这些锁。
答案 1 :(得分:0)
如果您想使用Java,可以试试ReentrantReadWriteLock。
您可以找到有关其用法的几个教程,例如: here