首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信号能保证到达线程吗?

信号能保证到达线程吗?
EN

Stack Overflow用户
提问于 2018-09-08 03:53:29
回答 2查看 25关注 0票数 1

假设我有三个线程,T1, T2, T3,一个锁lock和一个Resource资源上的某个条件cond

T1获取锁,现在由于某些条件而执行cond.await(),而T2获取该锁并执行cond.signal(),然后继续执行lock.unlock(),但在一段时间内,T3也试图获取锁,所以它处于lock.lock()行,到底发生了什么?

T2重新获得锁,还是T3获得它,或者它是基于scheudler的随机锁?

EN

回答 2

Stack Overflow用户

发布于 2018-09-08 03:56:54

如果您阅读了文档,即ReentrantLock的javadoc,它在第3段中具体回答了这个问题:

这个类的构造函数

接受一个可选的公平性参数。当设置为true时,在争用情况下,锁倾向于授予等待时间最长的线程访问权限。否则,此锁不能保证任何特定的访问顺序。

票数 0
EN

Stack Overflow用户

发布于 2018-09-08 15:16:55

每当发出信号时,其中一个等待线程将被移除,并被放回entry set中,这样他就可以有机会运行。在signalAll方面,所有等待线程都将从等待集中删除,并放回条目集中,以便它们有机会运行。

并且是的,调度器然后决定从项目集合中挑选哪个线程。在公平方面,等待时间最长的人将首先获得机会。

很好的解释here

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

https://stackoverflow.com/questions/52228864

复制
相关文章

相似问题

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