Видя различные вопросы, связанные с блокировкой, и (почти) всегда находя термин «цикл из-за ложных пробуждений» 1 Интересно, кто-нибудь сталкивался с подобным пробуждением (предполагая, что подходящая аппаратная / программная среда для пример)
Я знаю, что термин «ложный» означает отсутствие очевидной причины, но каковы могут быть причины такого рода события?
( 1 Примечание: я не ставлю под сомнение практику зацикливания.)
Редактировать: Вспомогательный вопрос (для тех, кто любит примеры кода):
Если у меня есть следующая программа, и я ее запускаю:
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
, не ожидая вечно случайного события?