实现带有读写方法的类



我有一个面试问题:

实现一个类(命名为Resources)有两个方法。

public class Resources {
Read()
Write()
}

我们必须用以下约束来实现这个类。

  1. parallel Read()调用是可能的。

  2. parallel Write()调用是不可行的。

  3. 并行读()和写()是不可能的

我想弄清楚,我们如何实现这些方法的锁定。因此,对于一个类对象,我们可以满足上述约束。

任何线索都会有帮助的。

我肯定他们不是在寻找这个答案。但是,如果"资源"的内部状态可以表示为单个变量,并且您将该变量设置为volatile,那么需求就实现了。

class Resources{
private volatile int a;

public int read(){return a;}
public void write(int a){this.a=a;}
}
现代处理器使用某种基于MESI (MODIFIED, EXCLUSIVE, SHARED, INVALID)的缓存一致性协议。并行写是不可能的,因为一次只有一个CPU拥有包含EXCLUSIVE/MODIFIED状态变量的缓存行。如果没有写,那么多个读cpu可以将缓存线设置为SHARED状态。

如果他们怀疑我的答案,那么你可以给他们一个链接,他们可以免费下载下面的书:

https://www.morganclaypool.com/doi/abs/10.2200/S00962ED2V01Y201910CAC049

我猜他们正在寻找答案Burak Serder已经在你的帖子的评论中给出了,但是读写锁使用起来更复杂,比volatile变量慢得多。此外,上述实现是非阻塞的;因此,无论一个线程是否挂起,其他线程仍然可以继续进行,这与基于锁的实现(如读/写锁)不同。

最新更新