NoFairSyncLock
2016-08-18 10:31:14 0 举报
NoFairSyncLock是一个用于同步访问共享资源的锁机制。它的主要目标是确保在多线程环境中,同一时间只有一个线程能够访问共享资源,从而避免数据竞争和不一致的问题。与公平锁不同,NoFairSyncLock不保证等待时间最长的线程能够获得锁,而是允许任意线程在满足条件时获取锁。这种策略在某些场景下可以提高性能,但在需要公平性的场合可能导致饥饿现象。NoFairSyncLock通常与条件变量一起使用,以实现更复杂的同步逻辑。总之,NoFairSyncLock是一种灵活且高效的同步工具,适用于对公平性要求不高的场景。
作者其他创作
大纲/内容
当前线程是否是独占锁线程
快速入队(用CAS加入到队尾)
不是
是否为0
true
获取刚刚添加到等待队列的结点
正常加入队列
设置当前线程为独占锁线程
不阻塞或者不中断
是
否
尾节点指向头结点tail = head
lock()
false
自己中断
NonFairSyncLock
CAS失败
成功
尾节点存在(即队列不为空)
tryAcquire(int acquires)
找到node的前驱结点p
添加不成功的话会循环执行此操作
用CAS初始化队列头结点
头结点置为当前节点,返回中断状态
interrupted=true
再获取一次锁
锁数量+1
获取同步锁数量
p == head && tryAcquire(arg)
c = getState()
不成功
加入到等待队列
队列为空
acquire(1)
CAS(0, acquires)
p是头结点并获取锁成功
将当前线程结点加入到队尾
阻塞并检查中断状态
无限循环(一直阻塞),直到node的前驱节点p之前的所有节点都执行完毕,p成为了head且node请求成功了
setExclusiveOwnerThread(Thread.currentThread())
锁分配完毕
0 条评论
下一页
为你推荐
查看更多