Necesito saber cómo evitar una condición de carrera cuando manejo señales en C. Cada vez que mi programa recibe una señal, quiero que altere una lista vinculada (global). Es de vital importancia que no pierda una señal, y es igualmente importante que la lista global vinculada que estoy modificando no se modifique mientras el controlador se está ejecutando.Condición de carrera en controlador de señales C rompecabezas
El problema es, si recibo una señal, y comienzo el controlador, pero luego soy interrumpido por otra señal. Esto (según tengo entendido) desencadena una nueva ejecución del manejador de señal, que operará en el mismo conjunto de datos globales, ¡no permitido!
No puedo usar un candado, porque si se interrumpe la primera llamada del manejador, naturalmente nunca liberará el candado para que el manejador de interrupción lo recoja. Entonces, ¿cómo lo hago? ¿Alguna idea?
Parece que el bloqueo es realmente lo que necesita, pondrá la segunda llamada en espera hasta que termine la primera. ¿No es eso exactamente lo que quieres? – Doggett
Pondría punto muerto en este caso, porque la nueva interrupción se bloqueará y nunca devolverá el control al subproceso que se está ejecutando. Es decir, el primero * nunca * terminará. – Nate
Tenga en cuenta que las señales se "perderán" de todos modos. Si, por ejemplo, su proceso obtiene 2 señales bastante juntas en el tiempo, se fusionan con el sistema operativo en una señal. – nos