首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信号量(int许可,布尔公平),公平到底是做什么的?

信号量(int许可,布尔公平),公平到底是做什么的?
EN

Stack Overflow用户
提问于 2018-01-23 12:01:20
回答 1查看 841关注 0票数 5

如果信号量上没有可用的许可,我需要实现FIFO队列。我的教授已经明确指出,在考试期间,我们只能使用acquire()release()方法。我的想法是使用LinkedList方法实现tryAcquire(),如果结果为false,则在列表底部添加currentThread。由于无法使用我搜索的tryAcquire()方法,我注意到了这个构造。例如,如果我初始化一个信号量:

代码语言:javascript
复制
Semaphore example = new Semaphore(5, true);

如果线程试图在耗尽其许可的信号量上使用acquire()方法,会发生什么情况?它会自动创建队列吗?我必须以任何方式处理它还是过程是自动的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-23 14:03:01

java文档不是以这种方式显式的吗?

它说线程调用acquire将被阻塞,直到许可可用,而不是返回false的tryAcquire,这意味着没有许可证,但是线程调用这个方法不会阻塞。

公平是相关的。如果已经有等待线程,但您通过当前线程进行tryAcquire,则它将忽略公平性并获得该许可。由于不允许使用它,所以公平性是您要寻找的FIFO队列。从医生那里说:

当公平设置为真时,信号量保证调用任何获取方法的线程被选中以按照它们对这些方法的调用的顺序获得许可(先入先出;FIFO)。

如果有阻塞的线程,取消阻塞它们的两种方法是通过release添加许可或中断线程--我认为这是您不想要的。

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

https://stackoverflow.com/questions/48401242

复制
相关文章

相似问题

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