Vedere varie domande relative al blocco e (quasi) trovare sempre il termine "loop a causa di scatti spuri" Mi chiedo, qualcuno ha mai provato un tale tipo di attivazione (presupponendo un ambiente hardware/software decente per esempio)?Le sveglie spurie si verificano effettivamente?
Conosco il termine "spurio": nessun motivo apparente ma quali possono essere le ragioni di questo tipo di evento?
(Nota: Non sto mettendo in discussione la pratica di loop.)
Edit: Una domanda aiuto (per coloro che amano gli esempi di codice):
Se ho il programma seguente , e io eseguo:
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();
}
}
}
cosa posso fare per svegliare questa await
fino spurio senza aspettare per sempre per un evento casuale?
Migliore spiegazione qui: http://stackoverflow.com/questions/1461913/does-c-monitor-wait-suffer-from-spurious-wakeups/1461956#1461956 – Gili
Questo sblocco EINTR è vero per tutte le chiamate di sistema bloccanti derivate da Unix sistemi. Ciò ha reso il kernel molto più semplice, ma i programmatori dell'applicazione hanno acquistato il fardello. –
Pensavo che pthread_cond_wait() e gli amici non potessero restituire EINTR, ma restituire zero se spulturalmente svegliato? Da: http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_cond_wait.html "Queste funzioni non restituiscono un codice di errore di [EINTR]." – gubby