Java : ReentrantReadWriteLock with priority

一世执手 提交于 2019-12-19 02:54:28

问题


The following is the typical reader and writer pattern (a lot of reads and few writes)

  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();
       }
  }

I am wondering that is it possible to have priority to writer and reader ? For example, normally writer could wait a very long time (maybe forever) if there are constantly read locks held by other thread, so is it possible to have writer with higher priority, so whenever a writer comes it can be considered as it's being as high priority (skip line) something like that.


回答1:


According to the javadoc, the jdk implementation does not have any reader/writer priority. however, if you use the "fair" implementation, then the lock is granted in fifo order (still no reader/writer preference), so at least future readers will not block waiting writers.




回答2:


Write locks are actually already prioritized above reader locks.

If a thread wants to read the resource, it is okay as long as no threads are writing to it, and no threads have requested write access to the resource. By up-prioritizing write-access requests we assume that write requests are more important than read-requests.

please refer to this excellent post for more details.

Edit: it is important to note that this holds for the fair mode only. thanks @jtahlborn!



来源:https://stackoverflow.com/questions/11924942/java-reentrantreadwritelock-with-priority

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!