首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不公平锁如何比公平锁有更好的性能?

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

Stack Overflow用户
提问于 2020-11-25 01:56:14
回答 2查看 590关注 0票数 3

接口锁有一个有用的布尔公平性参数来保证锁的公平性-线程等待锁的时间最长,获得锁的第一个。我想我想在任何地方使用它,因为它可以防止饥饿。嗯,在我读到它会让我们付出更多的代价之前。

我找不到这个问题的答案,所以我希望有人能澄清这一点。也就是说,接受“尊重”公平的线程和不“尊重”公平的线程之间有什么区别?它们不是都存储在其他等待线程所在的“普通”队列中吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-25 03:26:50

首先,不是interface Lockfairness,而是ReentrantLock

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

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

另一方面,在fair模式下,调用lock的线程必须首先检查是否已经有线程等待此锁。如果没有这样的线程,并且它可以接受锁:没有队列并接受锁。如果它不能-它是排队。

最后一点是,在公平和不公平的模式下,线程被放在同一个队列上;也就是说:fair/unfair不是关于队列的内部表示。

票数 2
EN

Stack Overflow用户

发布于 2020-11-25 14:37:01

当一个锁被释放时,当多个线程在等待它时,等待时间最长的线程最有可能发现它想要的内存页在“休眠”时被交换掉了。睡眠时间最少的线程最有可能是“准备就绪”。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64997466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档