【问题标题】:Implement Class with Read and Write method用 Read 和 Write 方法实现类
【发布时间】:2021-12-13 01:13:37
【问题描述】:
我有一个面试问题:
实现一个类(名为 Resources)有两个方法。
public class Resources {
Read()
Write()
}
我们必须用以下约束来实现这个类。
-
可以并行调用 Read()。
-
并行 Write() 调用是不可能的。
-
不能并行读取()和写入()
我想弄清楚,我们如何为这些方法实现锁定。因此,对于一个类对象,我们可以满足上述约束。
任何线索都会有所帮助。
【问题讨论】:
标签:
java
multithreading
locking
in-memory
【解决方案1】:
我确定他们不是在寻找这个答案。但是,如果“资源”的内部状态可以表示为单个变量,并且您将变量设置为 volatile,那么要求就实现了。
class Resources{
private volatile int a;
public int read(){return a;}
public void write(int a){this.a=a;}
}
现代处理器使用某种基于 MESI(修改、独占、共享、无效)的缓存一致性协议。并行写入是不可能的,因为一次只有 1 个 CPU 的缓存行包含处于 EXCLUSIVE/MODIFIED 状态的变量。如果没有写入器,则多个读取 CPU 可以使缓存线处于 SHARED 状态。
如果他们怀疑我的回答,那么您可以向他们发送以下书籍的链接,他们可以免费下载:
https://www.morganclaypool.com/doi/abs/10.2200/S00962ED2V01Y201910CAC049
我猜他们正在寻找 Burak Serder 已经在您的帖子的评论中给出的答案,但是与 volatile 变量相比,读写锁使用起来更复杂,速度也慢得多。上面的实现也是非阻塞的;因此,无论一个线程是否被挂起,其他线程仍然可以取得进展,而基于锁的实现(如读/写锁)并非如此。