首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >信号量类中的公平性设置

信号量类中的公平性设置
EN

Stack Overflow用户
提问于 2013-07-24 04:57:15
回答 1查看 8.2K关注 0票数 23

我试图理解公平属性在Semaphore类中的有用性。

引用Javadoc的话特别提到:

通常,用于控制资源访问的信号量应该初始化为公平,以确保没有线程需要访问资源。当使用信号量进行其他类型的同步控制时,非公平排序的吞吐量优势往往超过公平性考虑。

有人能给我们举个例子说明这里可能需要驳船吗。我不能考虑过去的资源访问用例。另外,为什么默认是不公平的行为?

最后,使用公平行为是否有任何性能影响?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 05:51:07

Java的内置并发构造(synchronizedwait()notify()、.)不要指定在释放锁时应该释放哪个线程。由JVM实现来决定使用哪种算法。

公平性给了您更多的控制:当锁被释放时,等待时间最长的线程将被赋予锁(FIFO处理)。如果没有公平性(使用非常糟糕的算法),您可能会遇到这样的情况:线程总是等待锁,因为有一个连续的其他线程流。

如果信号量被设置为公平,就会有一个很小的开销,因为它需要维护等待锁的所有线程的队列。除非您正在编写高吞吐量/高性能/多核心应用程序,否则您可能看不到其中的区别!

不需要公平的场景--

如果有N个相同的工作线程,那么哪一个任务要执行并不重要

需要公平的场景

如果您有N个任务队列,则不希望一个队列永远等待而永远得不到锁。

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

https://stackoverflow.com/questions/17825508

复制
相关文章

相似问题

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