El concepto de despertar espurios en la sincronización de Java ha sido un tema de discusión durante bastante tiempo. Si bien existe el potencial de tal comportamiento, la pregunta sigue siendo: ¿realmente ocurren en la práctica?
de acuerdo con el artículo de Wikipedia sobre despertadores espurios, la implementación de Linux de la función PTHREAD_COND_WAIT () utiliza la llamada del sistema Futex. Cuando un proceso recibe una señal, puede regresar abruptamente con EINTR, haciendo que sus llamadas del sistema de bloqueo terminen temprano.
Esta condición de carrera surge porque pthread_cond_wait () no puede reanudar el hilo de espera si se ha perdido una actitud real mientras se ejecuta fuera de la llamada del sistema futex. Como resultado, una señal POSIX puede activar una activación espuria.
El programa Java proporcionado demuestra el concepto:
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();
}
}
}
para inducir un despertar espurio en este programa Java, se puede enviar una señal al proceso mientras espera la condición. Esto se puede lograr en Linux usando un comando como:
kill -s SIGUSR1
mientras que los despertares espurios pueden considerarse una molestia en algunos escenarios, su ocurrencia generalmente es raro en los sistemas operativos modernos. Sin embargo, juegan un papel en la optimización del rendimiento del sistema al evitar la espera innecesaria de la espera y la reducción de la sobrecarga al tratar con múltiples hilos que esperan la misma variable de condición.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3