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



InterfaceLock有一个有用的布尔公平性参数,可以保证锁定-中等待锁定时间最长的线程首先获得锁定公平性。我想我想在任何地方都用它,因为它可以防止饥饿。好吧,在我读到它会让我们失去性能之前。

我找不到这个问题的答案,所以我希望有人能澄清这个问题。意思是,取";荣誉公平性和不公平的线程?它们不是都储存在一些";普通的">队列其他等待线程在哪里?

首先,不是interface Lockfairness,而是ReentrantLock

发出Lock::lock的线程可能根本不会被放入队列中,无论是在fair还是unfair模式下。

unfair模式稍微容易理解一些。在这种模式下,请求锁的线程(通过调用Lock::lock(会尝试立即获取锁,而不会排队。如果成功的话——完成。它不会被放入任何队列中,因为它可以获得锁。注意,这并不关心队列中是否已经有等待线程,因此它是"等待线程";"不公平";(到其他已经在等待的线程(。如果它无法获取锁(意味着其他人拥有它(,它就会被放入队列。

另一方面,在fair模式中,调用lock的线程首先必须检查是否已经有线程在等待该锁。如果没有这样的线程并且它可以获取锁:则不排队并获取锁。如果不能,它就会排队。

最后一点是,在公平和不公平模式中,线程都被放在同一队列中;即:CCD_ 11与队列的内部表示无关。

当一个锁被释放,并且有多个线程在等待它时,等待时间最长的线程是最有可能发现它想要的内存页已经被交换掉的线程;睡觉"睡眠时间最少的线程最有可能是"睡眠"线程;准备出发">


如果这是你想说的话,向@xingbin道歉。

最新更新