7

以下是典型的读写器模式(读多写少)

  private ReadWriteLock lock = new ReentrantReadWriteLock();
  private int value;

  public void writeValue(int newValue){
       lock.writeLock().lock();
       try{
           this.value = newValue;
       }
       finally{
           lock.writeLock().unlock();
       }
  }

  public int readValue(){
       lock.readLock().lock();
       try{
           return value;
       }
       finally{
           lock.writeLock().unlock();
       }
  }

我想知道是否可以优先考虑作者和读者?例如,如果其他线程不断持有读锁,通常 writer 可能会等待很长时间(可能永远),所以是否可以让 writer 具有更高的优先级,所以每当 writer 到来时,它可以被认为是高优先级(跳线)之类的。

4

2 回答 2

5

根据javadoc,jdk 实现没有任何读写器优先级。但是,如果您使用“公平”实现,则按 fifo 顺序授予锁(仍然没有读取器/写入器首选项),因此至少未来的读取器不会阻塞等待的写入器。

于 2012-08-12T19:14:26.297 回答
0

写锁实际上已经优先于读锁。

如果一个线程想要读取资源,只要没有线程正在写入,并且没有线程请求对该资源的写访问,就可以了。通过提高写访问请求的优先级,我们假设写请求比读请求更重要。

有关更多详细信息,请参阅这篇出色的帖子

编辑:重要的是要注意这仅适用于公平模式。谢谢@jtahlborn!

于 2012-08-12T19:06:33.100 回答