【问题标题】:Implement Class with Read and Write method用 Read 和 Write 方法实现类
【发布时间】:2021-12-13 01:13:37
【问题描述】:

我有一个面试问题:

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

public class Resources {
   Read()
   Write()
}

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

  1. 可以并行调用 Read()。

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

  3. 不能并行读取()和写入()

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

任何线索都会有所帮助。

【问题讨论】:

标签: 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 变量相比,读写锁使用起来更复杂,速度也慢得多。上面的实现也是非阻塞的;因此,无论一个线程是否被挂起,其他线程仍然可以取得进展,而基于锁的实现(如读/写锁)并非如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    相关资源
    最近更新 更多