zoukankan      html  css  js  c++  java
  • Reentrantlock-的核心内容

    ReentrantLock是一种基于AQS框架的应用实现,AQS 是核心思想。

    第一 、自旋 while(true)

    第二 、加锁 保证只有一个线程可以拿到锁,其他线程一直在自旋的循环中等待,CAS 加锁 compare and swap

    第三 、用队列实现公平或非公平锁

    第四 、LockSupport park、unpark实现阻塞

    伪代码

    //加锁
    //第一 自旋
    while(true){ 
    //第二 CAS 加锁
        if (unsafe.compareAndSwapInt(,,,)){ //加锁成功 
            break; //加锁成功的跳出循环
        }
        //将block的线程加入队列,以实现公平非公平锁 
        //第三 queue 记录需要加锁的线程
        HashSet.linkedQueue.add(thread); 
        //第四 利用park block 线程
        LockSupport.park();//加锁失败的在此等待 
    }
     
    //解锁
    LockSupport.unpark(thread);
  • 相关阅读:
    sed
    UCOSIII(二)
    UCOSIII(一)
    IIC
    SPI
    vii
    find
    grep
    Scrum项目4.0
    Scrum项目3.0
  • 原文地址:https://www.cnblogs.com/luao/p/13815341.html
Copyright © 2011-2022 走看看