为了账号安全,请及时绑定邮箱和手机立即绑定

信号是否保证到达线程?

信号是否保证到达线程?

慕容708150 2021-09-03 21:55:09
假设我有三个线程,T1, T2, T3一个锁lock和cond一个Resource资源上的一些条件。T1获得锁,现在cond.await()由于某些条件而T2获得该锁,cond.signal()然后继续执行lock.unlock(),但有一段时间,T3也试图获得锁,所以它位于 的行lock.lock(),究竟发生了什么?是T2重新获得锁还是获得了锁,还是T3基于 scheudler 是随机的?
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

每当发出信号时,其中一个等待线程将被删除并放回入口集中,以便他有机会运行。就 signalAll 而言,所有等待线程将从等待集中移除并放回入口集中,以便它们有机会运行。

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

很好的解释在这里


查看完整回答
反对 回复 2021-09-03
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2021-09-03
  • 2 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信