美文网首页
17 读写锁

17 读写锁

作者: random123 | 来源:发表于2020-05-26 22:44 被阅读0次

    读写锁适用于读多写少的场景

    三条原则:1.允许多个线程同时读共享变量;  2.只允许一个线程写共享变量;   3.如果一个写线程正在执行写操作,此时禁止读线程读或写共享变量。  

    读写锁示例,注意读写锁是可重入锁

    读写锁的升级与降级

    读写锁升级:从读锁变成写锁, ReadWriteLock不支持!!

    读锁还没有释放,获取了写锁,由于写锁互斥,必须保证读锁被释放,但是读锁释放是在写操作之后,陷入死锁

    读写锁降级:从写锁变为读锁  ReadWriteLock支持

    锁降级

    为什么要在写锁中获取读锁(为什么支持锁降级)?    为了保证数据的可见性。假设两个线程A、B。如果写锁里没有读锁,线程A写完后,释放写锁;线程B获得了写锁,并写了数据,也释放了;但是线程A并没有结束,需要继续使用数据,但是此时数据已经被B修改了。  如果有读锁,线程A即使释放了写锁,由于读写的互斥性,线程A仍持有读锁,线程B无法获得写锁,会被阻塞。

    获取写锁的前提是,其他线程没有占用写锁和读锁,自己的线程也没有占用读锁。

    获取读锁的前提是,其他线程没有占用写锁,自己线程占用写锁是可以获取的。

    相关文章

      网友评论

          本文标题:17 读写锁

          本文链接:https://www.haomeiwen.com/subject/brlbahtx.html