zoukankan      html  css  js  c++  java
  • ReentrantReadWriteLock总结

    ReentrantReadWriteLock的流程的一些特性;

    // ReentrantReadWriteLock.WriteLock.lock()特性:
    • 已持有读锁的线程不能再持有写锁;
    • 已持有写锁的线程可以再持有写锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有读锁的线程,其他线程是不能持有写锁的;
    • 已持有写锁的线程,其他线程是不能持有写锁的;

    // ReentrantReadWriteLock.ReadLock.lock()特性:
    • 已持有写锁的线程,其他线程是不能持有读锁的;
    • 已持有写锁的线程可以再持有读锁,这里我们称之为锁降级;
    • 已持有读锁的线程可以再持有读锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有读锁的线程,其他线程也可以持有读锁的;

    3、然而将上面的WriteLockReadLock特性进行合并为:
    • 已持有写锁的线程可以再持有写锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有写锁的线程,其他线程是不能持有读锁、写锁的;
    • 已持有写锁的线程可以再持有读锁,这里我们称之为锁降级;

    • 已持有读锁的线程可以再持有读锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有读锁的线程,其他线程也可以持有读锁的;
    • 已持有读锁的线程,其他线程(同时也包括已持有读锁的线程)是不能持有写锁的;

    4、排除可重入的特性,再精炼合并特性为:
    • 写锁会排斥读锁、写锁,但是读锁会阻塞写锁;
    • 写锁可以降级为读锁,但读锁不能升级为写锁; 

  • 相关阅读:
    任务调度~Quartz.net实现简单的任务调试
    编译器错误~写JS还是谨慎点好
    编译器错误~不能向ObjectStateManager添加相同的键
    EF架构~将数据库注释添加导入到模型实体类中
    c++ pair类型
    Adobe dreamweaver 5.5安装过程
    c++函数作为参数传递
    c++ vector.clear()
    动态规划之装配线调度问题
    转:VS后缀名详解
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/11145196.html
Copyright © 2011-2022 走看看