首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.concurrent.locks.ReentrantReadWriteLock文档

java.util.concurrent.locks.ReentrantReadWriteLock文档
EN

Stack Overflow用户
提问于 2010-05-23 08:41:53
回答 1查看 505关注 0票数 1

免责声明:我不太擅长Java,我只是比较C#和Java之间的读/写锁来更好地理解这个主题&这两个实现背后的决策。

有JavaDoc关于ReentrantReadWriteLock。它说明了关于锁的升级/降级的如下内容:

  • Lock降级 ..。但是,从读锁升级到写锁是不可能的。

它还有下面的示例,显示从读锁到写锁的手动升级:

代码语言:javascript
复制
 // Here is a code sketch showing how to exploit reentrancy 
 // to perform lock downgrading after updating a cache

 void processCachedData() {
 rwl.readLock().lock();
 if (!cacheValid) {
    // upgrade lock manually
    #1: rwl.readLock().unlock();   // must unlock first to obtain writelock
    #2: rwl.writeLock().lock();
    if (!cacheValid) { // recheck
       ...
    }
   ...
 }
 use(data);
 rwl.readLock().unlock();

这是否意味着上面的示例在某些情况下可能不正确--我的意思是在#1和#2行之间没有锁,底层结构暴露于其他线程的更改中。所以不能把它看作是升级锁的正确方法,还是我在这里漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-23 08:44:56

是的,你是对的。但是这段代码在获得写锁后再次调用if (!cacheValid) { // recheck来处理这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2891111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档