java - 读写锁中 写锁的降级问题
本文介绍了java - 读写锁中 写锁的降级问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
写锁降级的时候 要求当前已经获取到写锁的线程把持住写锁,然后获取读锁,随后释放写锁。
那么为什么要求把持住写锁呢??
上图中提到 那么当前线程无法感知线程T的数据更新 这个如何理解。如果线程T获取到了写锁,然后对数据进行了更新,在没有释放写锁之前,当前线程无法感知到数据的更新,这个是没问题的吧,但是一旦线程T释放 写锁,那么当前线程就可以感知到数据的更新了,这里理解应该没问题吧?
help me to explain,thx
解决方案
这是在解释锁降级吧,首先写锁是独占的,读锁是共享的,然后读写锁是线程间互斥的,锁降级的前提是所有线程都希望对数据变化敏感,但是因为写锁只有一个,所以会发生降级。
如果先释放写锁,再获取读锁,可能在获取之前,会有其他线程获取到写锁,阻塞读锁的获取,就无法感知数据变化了。所以需要先hold住写锁,保证数据无变化,获取读锁,然后再释放写锁。
这篇关于java - 读写锁中 写锁的降级问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文