美文网首页
锁 - 互斥锁 vs 读写锁

锁 - 互斥锁 vs 读写锁

作者: 面向对象架构 | 来源:发表于2022-11-24 00:36 被阅读0次

    互斥锁

    典型的互斥锁:synchronzied

    一次最多只能有一个线程持有的锁。如Java的Lock。

    共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将该资源加锁,使用完后会将其解锁, 如果在使用过程中有其他线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会被唤醒, 如果被阻塞的资源不止一个,那么它们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又陷入沉睡。

    读写互斥场景有:读-读互斥、读-写互斥、写-读互斥、写-写互斥

    读写锁

    典型的读写锁:ReentrantReadWriteLock、CopyOnWriteArrayList、CopyOnWriteArrayset

    读写锁既是互斥锁,又是共享锁,read模式是共享,write是互斥(排它锁)的。

    读写锁有三种状态 :

    1. 读加锁状态
    2. 写加锁状态
    3. 不加锁状态

    读写锁能在读频率更高的情况下有更好的并发性能:

    • 如果有其它线程读数据, 则允许其它线程执行读操作, 但不允许写操作
    • 如果有其它线程写数据, 则其它线程都不允许读和写操作

    读写锁的经典例子有 ReentrantReadWriteLock

    相关文章

      网友评论

          本文标题:锁 - 互斥锁 vs 读写锁

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