读写锁(ReentrantReadWriteLock)

Posted chen--biao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读写锁(ReentrantReadWriteLock)相关的知识,希望对你有一定的参考价值。

重点:

  1、读锁共享

  2、写锁互斥

  3、读写锁互斥

 

锁降级:将写锁降级为读锁。(先获取写锁,再获取读锁,再释放写锁,最后释放读锁)

造成锁降级的原因:出于性能考虑,一般情况下,都将锁定的动作,精确到具体的语句块,在两个锁的语句块之间,有可能线程的交替执行,造成线程安全问题。

解决的方法:

  1、将锁的范围扩大。

  2、使用锁降级。

 

为什么需要锁降级: 

伪代码:
    w.lock();//写锁
    writeSomeDate();//修改某些数据
    w.unlock();//释放写锁

    r.lock();//读锁
    readSomeDate();//获取某个数据
    r.unlock();//释放读锁

此时,获取数据的时候,就有线程安全问题。


修改后的代码为:
    w.lock();//写锁
    writeSomeDate();//修改某些数据
    r.lock();//读锁
    w.unlock();//释放写锁
    readSomeDate();//获取某个数据
    r.unlock();//释放读锁
将读锁的锁定动作,放入到写锁的释放之前,就可以将锁降级为读锁。

  

以上是关于读写锁(ReentrantReadWriteLock)的主要内容,如果未能解决你的问题,请参考以下文章

ReadWriteLock: 读写锁

读写锁

Linux同步技术之读写锁

使用读写锁实现线程同步

C基础 读写锁中级剖析

读写锁