看到各种锁定相关的问题,(几乎)总是查找术语我不知道“因为虚假唤醒的循环”的,有没有人经历过这样一种唤醒(假设例如一个体面的硬件/软件环境)?真的发生虚假唤醒吗?
我知道术语“伪”是指没有明显原因,但有什么可以为此类事件的原因是什么?
(注:我不是质疑循环练习。)
编辑:一个辅助的问题(对于那些谁喜欢代码示例):
如果我有以下程序,我运行它:
public class Spurious {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
Condition cond = lock.newCondition();
lock.lock();
try {
try {
cond.await();
System.out.println("Spurious wakeup!");
} catch (InterruptedException ex) {
System.out.println("Just a regular interrupt.");
}
} finally {
lock.unlock();
}
}
}
有什么事到虚假唤醒这个await
,而不会永远等待一个随机事件?
http://www.jroller.com/cpurdy/entry/java_supplies_apologies_to_weird – akarnokd 2009-06-26 19:11:10
我读了这篇文章,并给了我一个想法,即单元测试通过随机/确定性地唤醒单元测试来测试一个应用程序对循环等待范例的一致性。或者它已经在某个地方可用? – akarnokd 2009-06-26 19:17:28
这是关于SO的另一个问题:“是否有*严格*虚拟机可用于测试?”。我很想看到一个严格的线程本地记忆 - 我不认为它们还存在 – 2009-06-26 20:01:53