标签:变量 释放 队列 cas lock ant 基于 等待队列 操作
基于AQS的锁(比如ReentrantLock)原理大体是这样:
有一个state变量,初始值为0,假设当前线程为A,每当A获取一次锁,status++. 释放一次,status--.锁会记录当前持有的线程。
当A线程拥有锁的时候,status>0. B线程尝试获取锁的时候会对这个status有一个CAS(0,1)的操作,尝试几次失败后就挂起线程,进入一个等待队列。
如果A线程恰好释放,--status==0, A线程会去唤醒等待队列中第一个线程,即刚刚进入等待队列的B线程,B线程被唤醒之后回去检查这个status的值,尝试CAS(0,1),而如果这时恰好C线程也尝试去争抢这把锁
标签:变量 释放 队列 cas lock ant 基于 等待队列 操作
原文地址:http://www.cnblogs.com/chengdabelief/p/7493200.html