![]() |
1
192
维基百科 article on spurious wakeups 有这个消息:
总结 :如果一个Linux进程收到信号,它的等待线程将各自享受一个好的、热的 虚假唤醒 . 我买的。这是一种比通常给出的模糊的“它是为了表现”的原因更容易吞下的药丸。 |
![]() |
2
21
我有一个展示这种行为的生产系统。 线程等待队列中有消息的信号。 在繁忙时期,多达20%的唤醒是虚假的(即当它唤醒时,队列中没有任何内容)。 此线程是消息的唯一使用者。 它运行在LinuxSLES-10 8处理器盒上,并使用GCC4.1.2构建。 这些消息来自外部源,并且是异步处理的,因为如果系统没有足够快地读取它们,就会出现问题。 |
![]() |
3
13
回答提提里的问题- 对! 它确实发生了,尽管 Wiki article 提到很多关于虚假唤醒的事情,我遇到的一个很好的解释是-
我在读这个答案 Source 发现这是合理的。也读 Spurious wakeups in Java and how to avoid them . 附:上面的链接是我的个人博客,上面有关于虚假唤醒的更多细节。 |
![]() |
4
8
只是为了增加这个。是的,它发生了,我花了三天时间在一台24核机器(JDK6)上寻找多线程问题的原因。10次执行中有4次没有任何模式。这从未发生在2核或8核上。 研究了一些在线材料,这不是Java问题,而是一般罕见但预期的行为。 |
![]() |
5
8
Cameron Purdy 写了一篇 blog post 不久前,关于被虚假唤醒问题击中的事情。所以是的,它发生了 我猜测这是在规格(可能性),因为一些平台的局限性,Java部署?尽管我可能错了! |
![]() |
6
0
https://stackoverflow.com/a/1461956/14731 包含一个很好的解释,说明为什么即使底层操作系统没有触发它们,您也需要防范虚假唤醒。有趣的是,这种解释适用于多种编程语言,包括Java。 |
![]() |
a a · 为什么在这个可重入锁示例中需要引用计数? 2 年前 |
![]() |
JohnLBevan · 为什么原子语句上需要锁提示? 7 年前 |
![]() |
Jay Wang · 生产者/消费者实施:陷入消费者循环 7 年前 |
![]() |
Andremoniy · 悲观写入是否锁定整个表? 7 年前 |
![]() |
Marcus Cemes · 选择。。。用于更新在提交后选择旧数据 7 年前 |
![]() |
Ins0maniac · Rails,锁定数据库中的记录 7 年前 |