不公平锁如何比公平锁有更好的性能?

fnatzsnv  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(355)

接口锁有一个有用的布尔公平性参数来保证锁中的公平性—等待锁最长的线程首先获得锁。我想我想在任何地方都用它来防止饥饿。好吧,在我读到它会影响我们的表现之前。
我找不到这个问题的答案,所以我希望有人能澄清这个问题。意思是,采用“尊重”公平的线程和不尊重公平的线程有什么区别?它们不是都存储在其他等待线程所在的“普通”队列中吗?

pzfprimi

pzfprimi1#

首先它不是 interface Lock 有那个吗 fairness ,但它是 ReentrantLock .
“普通”队列?像先进先出/后进先出(这已经不是“普通的”,因为它维护秩序)。所以我非常怀疑这是一个队列,它必须是一个允许随机访问的数据结构,首先(可能是一个队列,但允许随机访问)。
争用下+ fair mode ,当某个线程要获取锁时,它必须首先:
看看有没有人在等那把锁
转到队列(必须按等待时间排序)
等待轮到它执行
低于 unfair mode ,线程所要做的就是尝试 CAS (比较和交换)试图获得锁。所有线程都会同时执行此操作:谁赢了,谁就可以完成工作。所以在不公平的情况下要做的工作要少得多。

hec6srdp

hec6srdp2#

当一个锁被释放,并且有多个线程在等待它时,等待时间最长的线程最有可能发现它想要的内存页在“休眠”时被交换掉。休眠时间最少的线程最有可能“准备就绪”
如果这是你想说的,那就向@xingbin道歉。

相关问题